[
  {
    "path": ".eslintignore",
    "content": "node_modules\nsrc/weui-wxss\nminiprogram_dist\nminiprogram_dev\ntools"
  },
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n    root: true,\n    parser: '@typescript-eslint/parser',\n    parserOptions: {\n        ecmaVersion: 6,\n        sourceType: 'module'\n    },\n    env: {\n        es6: true,\n        browser: true,\n        jest: true,\n        commonjs: true,\n        node: true\n    },\n    plugins: [\n      '@typescript-eslint',\n      'prettier'\n    ],\n    extends: [\n        'eslint:recommended',\n        'plugin:@typescript-eslint/eslint-recommended',\n        'plugin:@typescript-eslint/recommended',\n        'prettier/@typescript-eslint'\n    ],\n    globals: {\n        wx: true,\n        App: true,\n        Page: true,\n        Component: true\n    },\n    rules: {\n        'prettier/prettier': 'error',\n        'no-console': [\"error\", { allow: [\"warn\", \"error\"] } ],\n        '@typescript-eslint/ban-ts-ignore': 'off',\n        '@typescript-eslint/no-empty-function': 'off',\n        '@typescript-eslint/explicit-function-return-type': 'off',\n        '@typescript-eslint/no-explicit-any': 'off'\n    }\n}\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/----.md",
    "content": "---\nname: 特性请求\nabout: 提出一个好的特性\ntitle: \"[FEATURE]\"\nlabels: ''\nassignees: ''\n\n---\n\n## 遇到的问题\n描述你想要达到的效果，以及你的使用场景\n\n## 特性方案\n描述你希望的实现方案\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/--bug.md",
    "content": "---\nname: 报告Bug\nabout: 创建一个Bug报告\ntitle: \"[BUG]\"\nlabels: ''\nassignees: ''\n\n---\n\n## Bug描述\n描述你遇到的Bug，所产生的非预期行为\n\n## 复现方式\n复现该Bug的方式，建议直接提供 [代码片段](https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)\n\n## 版本信息\n- weui 版本 [useExtendedLib 引入则直接填写 useExtendedLib] :\n"
  },
  {
    "path": ".gitignore",
    "content": ".idea\n.DS_Store\n\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\nminiprogram_dist\nminiprogram_dev\nnode_modules\ncoverage\ndist\n"
  },
  {
    "path": ".gitmodules",
    "content": ""
  },
  {
    "path": ".npmignore",
    "content": ".idea\n.DS_Store\npackage-lock.json\n\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\ntest\ntools\ndocs\nminiprogram_dev\nnode_modules\ncoverage\ntsconfig.json\ntslint.json"
  },
  {
    "path": ".npmrc",
    "content": "registry=https://registry.npmjs.org\n"
  },
  {
    "path": ".prettierrc.js",
    "content": "module.exports = {\n  // 一行最多 100 字符\n  printWidth: 100,\n  // 使用 4 个空格缩进\n  tabWidth: 4,\n  // 不使用缩进符，而使用空格\n  useTabs: false,\n  // 行尾需要有分号\n  semi: false,\n  // 使用单引号\n  singleQuote: true,\n  // 对象的 key 仅在必要时用引号\n  quoteProps: 'as-needed',\n  // 末尾不需要逗号\n  trailingComma: 'none',\n  // 大括号内的首尾需要空格\n  bracketSpacing: true,\n  // 箭头函数，只有一个参数的时候，也需要括号\n  arrowParens: 'always',\n  // 每个文件格式化的范围是文件的全部内容\n  rangeStart: 0,\n  rangeEnd: Infinity,\n  // 不需要写文件开头的 @prettier\n  requirePragma: false,\n  // 不需要自动在文件开头插入 @prettier\n  insertPragma: false,\n  // 使用默认的折行标准\n  proseWrap: 'preserve',\n  // 根据显示样式决定 html 要不要折行\n  htmlWhitespaceSensitivity: 'css',\n  // 换行符使用 lf\n  endOfLine: 'lf'\n};"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\nnode_js:\n  - \"v12.16.3\"\nscript: npm run test\nafter_script:\n  - npm run codecov\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# 更新日志\n\n## 1.5.6\n\n- fix: 修改 ext-class 实现\n- fix: 修复 checkbox 样式错误\n\n## 1.5.5\n\n- fix: 修复 cell 丢失边缘线样式\n- fix: 修复 checkbox 样式错误\n- fix: 修复 navigation-bar background 没生效\n\n## 1.5.4\n\n- feat: half-screen-dialog, dialog, actionsheet, gallery, toptips 添加 rootPortal 参数\n- fix: 修复 half-screen-dialog, dialog, actionsheet, gallery, toptips 默认不使用 root-portal\n\n## 1.5.3\n\n- fix: 修复 slideview 拆分 skyline 实现\n\n## 1.5.2\n\n- feat: 升级 `weui-wxss` 至 2.6.17\n- feat: slideview 拆分 skyline 实现\n\n## 1.5.1\n\n- feat: 修复 dark-mode 实现\n\n## 1.5.0\n\n- feat: 重构 skyline-patch\n- feat: 修改 ext-class 实现\n\n## 1.4.2\n\n- fix: 修复 half-screen-dialog skyline 动画\n- fix: 修复 navigation-bar 样式\n\n## 1.4.1\n\n- fix: 修复 half-screen-dialog skyline 动画\n\n## 1.4.0\n\n- feat: 正式支持 skyline\n\n## 1.3.1\n\n- fix: 移除 babel 依赖\n\n## 1.3.0\n\n- feat: skyline 兼容\n- feat: 升级 `weui-wxss` 至 2.6.6\n\n## 1.2.10\n\n- fix: half-screen-dialog 恢复滚动\n\n## 1.2.9\n\n- fix: dialog 修复 z-index 层级\n\n## 1.2.8\n\n- fix: searchbar 修复聚焦状态\n\n## 1.2.7\n\n- fix: dialog 修复自动聚焦 outline #216\n- fix: half-screen-dialog 修复自动聚焦 outline #216\n- fix: actionsheet 修复自动聚焦 outline #216\n- fix: gallery 修复自动聚焦 outline #216\n\n## 1.2.6\n\n- feat: dialog 使用 virtualHost\n- feat: 升级 `weui-wxss` 至 2.5.15\n\n## 1.2.5\n\n- feat: checkbox 添加 disabled 属性\n- fix: tabbar 修复 aria-label 告警 #206\n- fix: slideview 修复 disabled 属性 #203\n- fix: actionsheet 移除多余 wrap\n- fix: dialog 移除多余 wrap\n\n## 1.2.4\n\n- feat: 升级 `weui-wxss` 至 2.5.14\n- fix: 修复 fade 动画\n\n## 1.2.3\n\n- fix: 修复 half-screen-dialog button 样式向前兼容\n\n## 1.2.2\n\n- feat: tabbar 添加 reactive 选项\n- fix: 修复 actionsheet 底部 safearea 高度不正确\n- fix: 修复 gallery 底部 safearea 高度不正确\n## 1.2.1\n\n- fix: 修复 checkbox 无法操作\n\n## 1.2.0\n\n- feat: 升级 `weui-wxss` 至 2.5.0\n- feat: 无障碍适配\n- fix: 修复 slideview 隐藏按钮后无动画\n- fix: 修复 checkbox-group wx:if 判断不正确\n## 1.1.1\n\n- fix: 修复找不到 wxs\n- fix: 修复找不到 weui-wxss\n\n## 1.1.0\n\n- feat: 升级 `weui-wxss` 至 2.4.4\n- fix: 防止 `mp-half-screen-dialog` 滚动穿透\n- chore: 构建系统迁移至 mpflow\n\n## 1.0.8\n\n- fix: 修复 #153\n- fix: 修复 `mp-searchbar` 点击取消时错误 focus\n- fix: 修复 `mp-half-screen-dialog` 按钮在部分机型按钮排列出错\n\n## 1.0.7\n\n- fix: 修复 `mp-icon` 在 type 改变时报错\n\n## 1.0.6\n\n- feat: `mp-grids` 支持动态修改 grids\n- feat: `mp-searchbar` 点击取消按钮时触发 `cancel` 事件\n- fix: 修复 `mp-half-screen-dialog` 中的 desc 属性判断\n- fix: 修复 `mp-searchbar` 节流搜索没有获取最新数据\n- fix: 修复 `form-validator` 中 bytelength 报错\n\n## 1.0.5\n\n- updata: 升级 weui-wxss\n- update：使用 `hover-class` 代替 `:active`\n\n## 1.0.4\n\n- fix: 修复 rangelength 校验\n- feat: 支持自适应 tabbar\n\n## 1.0.3\n\n- fix: `required` 判断 (#93)\n- fix: dialog 未居中 (#94)\n\n## 1.0.2\n\n- fix: Toptips 不展示的bug\n- fix: Form 校验失效的bug\n\n## 1.0.1\n\n- 补充 package.json repository\n\n## 1.0.0\n\n- 更新`weui-wxss`到`2.3.0`版本，支持 DarkMode\n- Demo 支持 DarkMode"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 cunjinli,rockhou,xushengni,tomylin\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": "## WeUI组件库简介\n\n[![](https://img.shields.io/npm/v/weui-miniprogram.svg?style=flat-square)](https://www.npmjs.com/package/weui-miniprogram)\n[![](https://img.shields.io/npm/dw/weui-miniprogram?style=flat-square)](https://www.npmjs.com/package/weui-miniprogram)\n[![](https://img.shields.io/travis/wechat-miniprogram/weui-miniprogram.svg?style=flat-square)](https://github.com/wechat-miniprogram/weui-miniprogram)\n[![](https://img.shields.io/github/license/wechat-miniprogram/weui-miniprogram.svg?style=flat-square)](https://github.com/wechat-miniprogram/weui-miniprogram)\n[![](https://img.shields.io/codecov/c/github/wechat-miniprogram/weui-miniprogram.svg?style=flat-square)](https://github.com/wechat-miniprogram/weui-miniprogram)\n\n这是一套基于样式库[weui-wxss](https://github.com/Tencent/weui-wxss/)开发的小程序扩展组件库，同微信原生视觉体验一致的扩展组件库，由微信官方设计团队和小程序团队为微信小程序量身设计，令用户的使用感知更加统一。\n\n## 如何使用\n详细使用参考[文档](https://wechat-miniprogram.github.io/weui/docs/)\n\n## 开发\n1. 初始化\n```\nnpm run init\n```\n\n2. 执行命令：\n\n```\nnpm run dev\n```\n\n3. 构建组件库：\n\n```\nnpm run build\n```\n\n## 适配 DarkMode\n\n在根结点（或组件的外层结点）增加属性 `data-weui-theme=\"dark\"`，即把 WeUI 组件切换到 DarkMode 的表现，如:\n\n```html\n<view data-weui-theme=\"dark\">\n    ...\n</view>\n```\n"
  },
  {
    "path": "babel.config.js",
    "content": "module.exports = {\n    presets: ['@mpflow/plugin-babel/preset', '@mpflow/plugin-typescript/preset']\n}\n"
  },
  {
    "path": "docs/README.md",
    "content": "## WeUI组件库简介\n这是一套基于样式库[weui-wxss](https://github.com/Tencent/weui-wxss/)开发的小程序扩展组件库，同微信原生视觉体验一致的UI组件库，由微信官方设计团队和小程序团队为微信小程序量身设计，令用户的使用感知更加统一。\n\n> 支持[扩展库](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#useExtendedLib)引入，不占用小程序包体积。\n\n## 项目背景\n随着小程序的普及，微信也有很多内部小程序在开发，每个小程序都需要从零到1进行开发设计，而这个过程中，有大量的UI交互是重复的，另外，微信内部已经有一套H5版本的WeUI样式库。综合考虑，我们基于WeUI样式库开发了小程序版本的UI组件库，在内部多个小程序项目已经使用OK的情况下，我们把这套组件库开源让外部开发者也可以使用，欢迎大家Star以及提Issue。\n\n## 快速上手\n请参考[快速上手](./quickstart.md)\n\n## 在线预览\n扫描下方小程序码可以预览该组件库\n\n![](./img/demo.png#width:300px)\n\n## 参与贡献\n欢迎给我们提出宝贵见的意见，[项目地址](https://github.com/wechat-miniprogram/weui-miniprogram)\n"
  },
  {
    "path": "docs/actionsheet.md",
    "content": "# ActionSheet\n底部弹起的操作按钮组件\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-actionSheet\": \"weui-miniprogram/actionsheet/actionsheet\"\n  }\n}\n```\n\n## 示例代码\n```html\n<!--WXML示例代码-->\n<mp-actionSheet bindactiontap=\"btnClick\" show=\"{{showActionsheet}}\" actions=\"{{groups}}\" title=\"这是一个标题，可以为一行或者两行。\">\n</mp-actionSheet>\n```\n\n```js\nPage({\n    data: {\n        showActionsheet: false,\n        groups: [\n            { text: '示例菜单', value: 1 },\n            { text: '示例菜单', value: 2 },\n            { text: '负向菜单', type: 'warn', value: 3 }\n        ]\n    },\n    close: function () {\n        this.setData({\n            showActionsheet: false\n        })\n    },\n    btnClick(e) {\n        console.log(e)\n        this.close()\n    }\n})\n```\n## 效果展示\n![](./img/actionsheet.png#width:300px)\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| title | string |  | 否 | 标题 |\n| show-cancel | boolean | true | 否 | 是否显示取消按钮 |\n| cancel-text | string |  | 否 | 取消按钮的文本 |\n| mask-class | string |  | 否 | 背景蒙层的class |\n| ext-class | string |  | 否 | ActionSheet额外的class |\n| mask-closable | boolean | true | 否 | 点击背景蒙层是否可以关闭ActionSheet |\n| mask | boolean | true | 否 | 是否显示背景蒙层 |\n| show | boolean | false | 否 | 是否显示ActionSheet |\n| actions | Array | false | 是 | ActionSheet的按钮项的配置，每一项是包含text、value、type的Object，type的取值为warn和default，表示两种样式 |\n| bindclose | eventhandler |  | 否 | 点击背后的mask关闭掉ActionSheet触发的事件 |\n| bindactiontap | eventhandler |  | 否 | 点击ActionSheet的按钮项触发的事件，detail为{ value, index } |\n\n## Slot\n| 名称 | 描述 |\n| ---- | ---- |\n| title | 标题区域slot |"
  },
  {
    "path": "docs/badge.md",
    "content": "# Badge徽章\n出现在按钮、图标附近的数字或者状态标记。\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-badge\": \"weui-miniprogram/badge/badge\"\n  }\n}\n```\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| extClass | string |  | 否 | 组件类名 |\n| content | string |  | 否 | 内容区域 |\n\n## 提示\n不设置 content 属性时，默认展示小圆点 "
  },
  {
    "path": "docs/cell.md",
    "content": "# Cell\nCell是列表或者是表单的一项，常用于设置页的展示，或者用在表单中，作为表单的每一个要填写的项，Cell必须要放在[Cells](./cells.md)组件的下面。\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-cells\": \"weui-miniprogram/cells/cells\",\n    \"mp-cell\": \"weui-miniprogram/cell/cell\"\n  }\n}\n```\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| icon | string |  | 否 | Cell的最左侧的icon，是本地图片的路径，icon和名为icon的slot互斥 |\n| title | string |  | 否 | Cell最左侧的标题，一般用在[Form](./form.md)表单组件里面，icon和title二选一，title和名为title的slot互斥 |\n| hover | boolean | false | 否 | 是否有hover效果 |\n| link | boolean | false | 否 | 右侧是有跳转的箭头，`v1.0`后的版本，`link: true` 会自带 hover 效果 |\n| value | string |  | 是 | Cell的值，和默认的slot互斥 |\n| show-error | boolean | false | 否 | 用在[Form](./form.md)表单组件里面，在表单校验出错的时候是否把Cell标为warn状态 |\n| prop | string |  | 否 | 用在[Form](./form.md)表单组件里面，需要校验的表单的字段名 |\n| footer | string |  | 否 | Cell右侧区域的内容，和名为footer的slot互斥 |\n| inline | boolean |  | 否 | 用在[Form](./form.md)表单组件里面，表示表单项是左右显示还是上下显示 |\n\n## Slot\n| 名称 | 描述 |\n| ---- | ---- |\n| icon | 左侧图标slot |\n| title | 标题slot |\n| 默认 | 内容slot |\n| footer | 右侧区域slot |\n\n"
  },
  {
    "path": "docs/cells.md",
    "content": "# Cells\nCells是列表分组，常用于嵌套一组Cell或者[Checkbox](./checkbox.md)，注意，Checkbox-group和Cell组件都必须放在Cells组件下面，Cells效果如下图所示。\n\n![](./img/cells.png#width:300px)\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-cells\": \"weui-miniprogram/cells/cells\",\n    \"mp-cell\": \"weui-miniprogram/cell/cell\"\n  }\n}\n```\n\n## 示例代码\n```html\n<!--WXML示例代码-->\n<mp-cells ext-class=\"my-cells\" title=\"带说明的列表项\">\n    <mp-cell value=\"标题文字\" footer=\"说明文字\"></mp-cell>\n    <mp-cell>\n        <view>标题文字（使用slot）</view>\n        <view slot=\"footer\">说明文字</view>\n    </mp-cell>\n</mp-cells>\n```\n\n```js\n// page.js示例代码\nPage({\n});\n```\n\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| title | string |  | 否 | Cells的标题 |\n| footer | string |  | 否 | Cells底部的文字 |\n\n## Slot\n| 名称 | 描述 |\n| ---- | ---- |\n| 默认 | 内容slot |\n"
  },
  {
    "path": "docs/checkbox-group.md",
    "content": "# Checkbox-group和Checkbox\nCheckbox-group是由一组单选或者多选Checkbox组件组成，效果如下图所示。\n\n![](./img/checkbox-group.png#width:300px)\n\n## 引入组件\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-checkbox-group\": \"weui-miniprogram/checkbox-group/checkbox-group\",\n    \"mp-checkbox\": \"weui-miniprogram/checkbox/checkbox\",\n    \"mp-cells\": \"weui-miniprogram/cells/cells\"\n  }\n}\n```\n\n## 示例代码\n```html\n<!--WXML示例代码-->\n<mp-cells title=\"单选列表项\">\n    <mp-checkbox-group prop=\"radio\" multi=\"{{false}}\" bindchange=\"radioChange\">\n        <mp-checkbox wx:for=\"{{radioItems}}\" wx:key=\"value\" label=\"{{item.name}}\" value=\"{{item.value}}\" checked=\"{{item.checked}}\"></mp-checkbox>\n    </mp-checkbox-group>\n</mp-cells>\n<mp-cells title=\"复选列表项\">\n    <mp-checkbox-group prop=\"checkbox\" multi=\"{{true}}\" bindchange=\"checkboxChange\">\n        <mp-checkbox wx:for=\"{{checkboxItems}}\" wx:key=\"value\" label=\"{{item.name}}\" value=\"{{item.value}}\" checked=\"{{item.checked}}\"></mp-checkbox>\n    </mp-checkbox-group>\n</mp-cells>\n```\n\n```js\n// page.js示例代码\nPage({\n    data: {\n        radioItems: [\n            {name: 'cell standard', value: '0', checked: true},\n            {name: 'cell standard', value: '1'}\n        ],\n        checkboxItems: [\n            {name: 'standard is dealt for u.', value: '0', checked: true},\n            {name: 'standard is dealicient for u.', value: '1'}\n        ],\n    },\n    radioChange: function (e) {\n        console.log('radio发生change事件，携带value值为：', e.detail.value);\n\n        var radioItems = this.data.radioItems;\n        for (var i = 0, len = radioItems.length; i < len; ++i) {\n            radioItems[i].checked = radioItems[i].value == e.detail.value;\n        }\n\n        this.setData({\n            radioItems: radioItems,\n            [`formData.radio`]: e.detail.value\n        });\n    },\n    checkboxChange: function (e) {\n        console.log('checkbox发生change事件，携带value值为：', e.detail.value);\n\n        var checkboxItems = this.data.checkboxItems, values = e.detail.value;\n        for (var i = 0, lenI = checkboxItems.length; i < lenI; ++i) {\n            checkboxItems[i].checked = false;\n\n            for (var j = 0, lenJ = values.length; j < lenJ; ++j) {\n                if(checkboxItems[i].value == values[j]){\n                    checkboxItems[i].checked = true;\n                    break;\n                }\n            }\n        }\n\n        this.setData({\n            checkboxItems: checkboxItems,\n            [`formData.checkbox`]: e.detail.value\n        });\n    },\n});\n```\n\n## checkbox-group组件属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| multi | boolean | true | 否 | 单选还是多选 |\n| prop | string | | 否 | [Form](./form.md)表单组件校验的字段名 |\n| bindchange | eventhandler | | 否 | Checkbox-group发生改变时候触发的事件，detail为{value}，单选的value为checkbox的值，多选的value为选中的checkbox的值组成的数组 |\n\n## checkbox-group的Slot\n| 名称 | 描述 |\n| ---- | ---- |\n| 默认 | 内容slot |\n\n## checkbox组件属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| multi | boolean | true | 否 | 单选还是多选 |\n| checked | boolean | | 否 | 是否选中 |\n| value | string | | 否 | checkbox的值 |\n| bindchange | eventhandler | | 否 | Checkbox发生改变时候触发的事件，detail为{value}，value为checkbox的值 |\n"
  },
  {
    "path": "docs/dialog.md",
    "content": "# Dialog\nDialog弹窗组件。\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-dialog\": \"weui-miniprogram/dialog/dialog\"\n  }\n}\n```\n\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| title | string |  | 否 | 弹窗的标题 |\n| buttons | array\\<object\\> | [] | 否 | 底部的按钮组，建议最多提供两个按钮 |\n| mask | boolean |  | 是 | 是否显示蒙层 |\n| mask-closable | boolean |  | 是 | 点击蒙层是否可以关闭 |\n| show | boolean | false | 否 | 是否显示弹窗 |\n| bindclose | eventhandler |  | 否 | 弹窗关闭的时候触发的事件 |\n| bindbuttontap | eventhandler |  | 否 | buttons按钮组点击时触发的事件，detail为{index, item}，item是按钮的配置项 |\n\nbuttons提供按钮组配置，每一项表示一个按钮，每一项的属性为\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| extClass | string |  | 否 | 按钮的额外的class，可用于修改组件内部的样式 |\n| text | string |  | 否 | 按钮的文本 |\n\n## Slot\n弹窗组件只有一个默认slot用于显示弹窗的内容\n"
  },
  {
    "path": "docs/form-page.md",
    "content": "# FormPage\n表单页面，规定了标准表单的顶部的标题和底部的按钮提示等区域的规范\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-form-page\": \"weui-miniprogram/form-page/form-page\",\n    \"mp-form\": \"weui-miniprogram/form/form\"\n  }\n}\n```\n\n## 示例代码\n```html\n<!--WXML示例代码-->\n<mp-form-page title=\"表单结构\" subtitle=\"展示表单页面的信息结构样式, 分别由头部区域/控件区域/提示区域/操作区域和底部信息区域组成。\">\n    <mp-form id=\"form\" rules=\"{{rules}}\" models=\"{{formData}}\">\n    </mp-form>\n    <checkbox-group slot=\"tips\" bindchange=\"bindAgreeChange\">\n        <label class=\"weui-agree\" for=\"weuiAgree\">\n            <view class=\"weui-agree__text\">\n                <checkbox class=\"weui-agree__checkbox\" id=\"weuiAgree\" value=\"agree\" checked=\"{{isAgree}}\" />\n                <view class=\"weui-agree__checkbox-icon\">\n                    <icon class=\"weui-agree__checkbox-icon-check\" type=\"success_no_circle\" size=\"9\" wx:if=\"{{isAgree}}\"></icon>\n                </view>\n                阅读并同意<navigator url=\"\" class=\"weui-agree__link\">《相关条款》</navigator>\n            </view>\n        </label>\n    </checkbox-group>\n    <view slot=\"button\">\n        <button class=\"weui-btn\" type=\"primary\" bindtap=\"submitForm\">确定</button>\n    </view>\n</mp-form-page>\n```\n\n## 效果展示\n![](./img/form-page.png#width:300px)\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| title | string |  | 否 | 标题 |\n| subtitle | boolean |  | 否 | 副标题 |\n\n## Slot\n| 名称 | 描述 |\n| ---- | ---- |\n| title | 标题区域slot和title属性互斥 |\n| tips | 底部确认按钮前面的提示区域 |\n| button | 底部提交按钮区域 |\n| suffixtips | 提交按钮下面的提示区域 |\n| footer | 页脚的内容区域 |"
  },
  {
    "path": "docs/form.md",
    "content": "# Form\nForm表单组件，结合Cell、Checkbox-group、Checkbox组件等做表单校验。\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-form\": \"weui-miniprogram/form/form\"\n  }\n}\n```\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| rules | object\\<array\\> |  | 否 | 表单校验的规则列表，格式下面详细介绍 |\n| models | object |  | 否 | 需要校验的表单的数据 |\n| bindsuccess | eventhandler |  | 否 | 校验成功触发的事件，detail是{trigger}，trigger的值是change或validate，表示是输入改成触发的校验还是主动调用的validate接口 |\n| bindfail | eventhandler |  | 否 | 校验失败触发的事件，detail是{trigger, errors}，trigger的值是change或validate，表示是输入改成触发的校验还是主动调用的validate接口。errors是错误的字段列表。 |\n\nrules是表单校验的规则列表，列表每一项表示一个字段的校验规则，注意，必须要在Cell或Checkbox-group组件声明prop属性，表单校验规则才生效，表单校验规则的定义如下：\n\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| name | string |  | 是 | 校验的字段名 |\n| rules | array/object |  | 是 | 校验的规则，如果有多项，则是数组 |\n| rules.message | string |  | 否 | 校验失败时候提示的文字 |\n| rules.validator | function |  | 否 | 自定义校验函数，接受rule, value, param, models四个参数，其中rule格式为{name: '字段名', message: '失败信息'}, value是字段值，param是校验参数，models是form组件的models属性。函数返回错误提示，表示校验失败，错误提示会通过回调返回给开发者 |\n| rules.\\[rule\\] | string |  | 否 | rule是变量，表示内置的校验规则名称，比如required，则校验规则对象为{name: \"fieldName\", rules: {required: true}}，下面会详细介绍所有的内置规则 |\n\n## 内置校验规则\n| 规则名 | 参数 | 说明 |\n| ---- | ---- | ---- |\n| required |  | 是否必填 |\n| minlength | number | 最小长度 |\n| maxlength | number | 最大长度 |\n| rangelength | [number, number] | 长度范围，参数为[最小长度， 最大长度] |\n| bytelength | number | 字节长度 |\n| range | [number, number] | 数字的大小范围 |\n| min | number | 最小值限制 |\n| max | number | 最大值限制 |\n| mobile |  | 手机号码校验 |\n| email |  | 电子邮件校验 |\n| url |  | URL链接地址校验 |\n| equalTo | string | 相等校验，参数是另外一个字段名 |\n\n## 接口\n### validate\nvalidate接口接受类型为function的callback，callback有isValid和errors两个参数，isValid表示是否校验通过，errors在校验失败的时候的值为失败的字段列表。\n\n### validateField\nvalidateField接口接受2个参数，\n第一个是字段名，第二个是类型为function的callback，callback有isValid和errors两个参数，isValid表示是否校验通过，errors在校验失败的时候的值为失败的字段列表。\n\n## Slot\n| 名称 | 描述 |\n| ---- | ---- |\n| 默认 | 内容slot |"
  },
  {
    "path": "docs/gallery.md",
    "content": "# Gallery画廊\n用于多张图片展示，类似原生的wx.previewImage的展示。\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-gallery\": \"weui-miniprogram/gallery/gallery\"\n  }\n}\n```\n\n\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 说明 |\n| ---- | ---- | ------ | ---- |\n| extClass | string |  | 组件类名 |\n| show | boolean | true| 组件展示/隐藏 |\n| imgUrls | array | [] | 需要展示的图片集 |\n| current | number | 0 | 当前展示的图片index |\n| showDelete | boolean | true | 是否显删除按钮 |\n| hideOnClick | boolean | true | 点击图片是否隐藏该组件 |\n\n## 自定义事件\n| 事件名称 | 说明 | 回调参数 |\n| ---- | ---- | ------ |\n| change | 当前图片滑动切换之后触发 | e.detail = { current } 当前图片的位置 |\n| delete | 当前图片被删除后触发（delete 属性需要设为 true） | e.detail = { url, index } 被删除图片的 url 和 index |\n| hide | 组件被隐藏时候触发（hideOnClick 属性需要设为 true） | -- |"
  },
  {
    "path": "docs/half-screen-dialog.md",
    "content": "# Half Screen Dialog\n半屏弹窗，辅助完成当前页面任务时；提醒用户并引导用户的下一步操作；用户主动发起的任务时。\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-half-screen-dialog\": \"weui-miniprogram/half-screen-dialog/half-screen-dialog\"\n  }\n}\n```\n\n## 示例代码\n```html\n<!--WXML示例代码-->\n<mp-half-screen-dialog \n  bindbuttontap=\"buttontap\"\n  show=\"{{show}}\"\n  maskClosable=\"{{false}}\" \n  title=\"测试标题B\" \n  subTitle=\"测试标题B的副标题\"\n  desc=\"辅助描述内容，可根据实际需要安排\"\n  tips=\"辅助提示内容，可根据实际需要安排\"\n  buttons=\"{{buttons}}\"\n></mp-half-screen-dialog>\n<button class=\"weui-btn\" type=\"primary\" bindtap=\"open\">Open</button>\n```\n\n```js\n// page.js示例代码\nPage({\n    data: {\n        show: false,\n        buttons: [\n            {\n                type: 'default',\n                className: '',\n                text: '辅助操作',\n                value: 0\n            },\n            {\n                type: 'primary',\n                className: '',\n                text: '主操作',\n                value: 1\n            }\n        ]\n    },\n    open: function () {\n        this.setData({\n            show: true\n        })\n    },\n    buttontap(e) {\n        console.log(e.detail)\n    }\n});\n```\n\n## 效果展示\n![](./img/half-screen-dialog.png#width:300px)\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 说明 |\n| ---- | ---- | ------ | ---- |\n| extClass | string |  | 组件类名 |\n| closabled | boolean | true| 是否展示关闭按钮 |\n| title | string |  | 组件标题，可通过slot自定义 |\n| subTitle | string |  | 组件副标题，可通过slot自定义 |\n| desc | string |  | 辅助操作描述内容 |\n| tips | string |  | 辅助操作提示内容 |\n| maskClosable | boolean | true | 点击遮罩是否关闭该组件 |\n| mask | boolean | true | 是否需要遮罩层 |\n| show | boolean | true | 是否开启弹窗 |\n| buttons | array | [] | 辅助操作按钮列表 |\n\n## 自定义事件\n| 事件名称 | 说明 | 回调参数 |\n| ---- | ---- | ------ |\n| bindbuttontap | 点击辅助操作按钮时触发 | e.detail = { index, item } |\n| bindclose | 组件关闭时候触发 |  |\n\n## Slot\n| 名称 | 描述 |\n| ---- | ---- |\n| title | 组件自定义标题栏 |\n| desc | 组件自定义操作描述 |\n| footer | 操作按钮区域slot |"
  },
  {
    "path": "docs/icon.md",
    "content": "# Icon\n图标\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-icon\": \"weui-miniprogram/icon/icon\"\n  }\n}\n```\n\n## 示例代码\n```html\n<!--WXML示例代码-->\n<mp-icon type=\"field\" icon=\"add\" color=\"black\" size=\"{{25}}\"></mp-icon>\n<mp-icon icon=\"add\" color=\"black\" size=\"{{25}}\"></mp-icon>\n```\n\n## 效果展示\n![](./img/icon.png#width:300px)\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 说明 |\n| ---- | ---- | ------ | ---- |\n| extClass | string |  | 组件类名 |\n| type | string | outline| Icon类型，可选值 outline（描边），field（填充） |\n| icon | string |  | Icon名字 |\n| size | number | 20 | Icon的大小，单位 px |\n| color | string | black | Icon的颜色，默认黑色 |\n\n## Icon 列表\n![](./img/iconList1.jpg#width:1366px)\n![](./img/iconList2.jpg#width:1366px)\n"
  },
  {
    "path": "docs/loading.md",
    "content": "# Loading加载\n加载数据时的 loading 效果\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-loading\": \"weui-miniprogram/loading/loading\"\n  }\n}\n```\n\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 说明 |\n| ---- | ---- | ------ | ---- |\n| extClass | string |  | 组件类名 |\n| show | boolean | true | loading 是否展示 |\n| animated | boolean | false | loading 显示/消失 动画 |\n| duration | number | 350 | 过渡动画时间 |\n| type | string | dot-gray | loading 类型，可选值有 dot-white、dot-gray、circle |\n| tips | string | 加载中 | 当 type 为 circle时生效，loading辅助文字 |\n"
  },
  {
    "path": "docs/msg.md",
    "content": "# Msg\nMsg组件提供操作确认页或操作成功或失败的标准的确认页的样式。\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-msg\": \"weui-miniprogram/msg/msg\"\n  }\n}\n```\n\n\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| type | string |  | 否 | 顶部图标的样式，和[icon](https://developers.weixin.qq.com/miniprogram/dev/component/icon.html)组件的type属性用法一样 |\n| size | number | 64 | 否 | type不为空的时候有效，和[icon](https://developers.weixin.qq.com/miniprogram/dev/component/icon.html)组件的size属性用法一样 |\n| icon | string | | 否 | type为空的时候，icon的值是顶部图标的路径 |\n| title | string |  | 否 | 标题 |\n| desc | string | | 否 | 描述内容，和desc的slot显示在相同的位置 |\n\n## Slot\n| 名称 | 描述 |\n| ---- | ---- |\n| desc | 描述内容slot |\n| extend | desc下面的说明区域的slot |\n| handle | 操作按钮区域slot |\n| footer | 底部slot |\n"
  },
  {
    "path": "docs/navigation.md",
    "content": "# Navigation\nNavigation是小程序的顶部导航组件，当页面配置`navigationStyle`设置为`custom`的时候可以使用此组件替代原生导航栏。\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"weui-miniprogram/navigation-bar/navigation-bar\"\n  }\n}\n```\n\n\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| title | string |  | 否 | 导航标题，如果不提供，则名为center的slot有效 |\n| back | boolean | true | 否 | 是否显示返回按钮，默认点击按钮会执行navigateBack，如果为false，则名为left的slot有效 |\n| delta | number | 1 | 否 | 当back为true的时候有效，表示navigateBack的delta参数 |\n| background | string | #f8f8f8 | 否 | 导航背景色 |\n| color | string |  | 否 | 导航颜色 |\n| loading | boolean |  | 否 | 是否显示标题左侧的loading |\n| show | boolean |  | 否 | 显示隐藏导航，隐藏的时候navigation的高度占位还在 |\n| animated | boolean |  | 否 | 显示隐藏导航的时候是有opacity过渡动画 |\n| bindback | eventhandler |  | 否 | 在back为true时，点击back按钮触发此事件，detail包含delta |\n\n## Slot\n| 名称 | 描述 |\n| ---- | ---- |\n| left | 左侧slot，在back按钮位置显示，当back为false的时候有效 |\n| center | 标题slot，在标题位置显示，当title为空的时候有效 |\n| right | 在导航的右侧显示 |\n"
  },
  {
    "path": "docs/other.md",
    "content": "# 其他组件\n\n出于性能考虑，`weui-miniprogram` 并没有对所有 WeUI 组件进行封装（如：flex布局组件），可以直接使用 WeUI 中定义的组件结构（参考 [Demo](https://github.com/wechat-miniprogram/weui-miniprogram/tree/master/tools/demo)）。\n\n## 示例代码\n\n在引入 weui.wxss 后，可以直接使用 weui-wxss 中定义的 class 自定义样式，以 flex 组件为例：\n\n```html\n<view class=\"page__hd\">\n    <view class=\"page__title\">Flex</view>\n    <view class=\"page__desc\">Flex布局</view>\n</view>\n<view class=\"page__bd page__bd_spacing\">\n    <view class=\"weui-flex\">\n        <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n    </view>\n    <view class=\"weui-flex\">\n        <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n        <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n    </view>\n    <view class=\"weui-flex\">\n        <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n        <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n        <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n    </view>\n    <view class=\"weui-flex\">\n        <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n        <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n        <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n        <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n    </view>\n    <view class=\"weui-flex\">\n        <view><view class=\"placeholder\">weui</view></view>\n        <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n        <view><view class=\"placeholder\">weui</view></view>\n    </view>\n</view>\n```\n\n渲染到页面上会得到以下结果：\n\n![flex布局](./img/flex.png#width:396px)\n\n其他组件可以参考库中提供的 [Demo](https://github.com/wechat-miniprogram/weui-miniprogram/tree/master/tools/demo)"
  },
  {
    "path": "docs/quickstart.md",
    "content": "# 快速上手\n\n## 使用之前\n\n扩展组件库基于小程序自定义组件构建，在使用扩展组件库之前，建议先阅读熟悉小程序[自定义组件](../../framework/custom-component/index.md)。\n\n## 引入组件\n\n1. 通过 [useExtendedLib 扩展库](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#useExtendedLib) 的方式引入，这种方式引入的组件将不会计入代码包大小。\n2. 可以通过[npm](https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html)方式下载构建，npm包名为`weui-miniprogram`\n\n\n## 如何使用\n\n首先要在 app.wxss 里面引入 weui.wxss，如果是通过 npm 引入，需要先构建 npm（“工具”菜单 --> “构建 npm”）\n\n**通过 [useExtendedLib 扩展库](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#useExtendedLib) 的方式引入，可省略 import 步骤**\n\n```css\n@import 'weui-miniprogram/weui-wxss/dist/style/weui.wxss';\n```\n\n然后可以在页面中引入 dialog 弹窗组件\n1. 首先在页面的 json 文件加入 usingComponents 配置字段\n```\n{\n  \"usingComponents\": {\n    \"mp-dialog\": \"weui-miniprogram/dialog/dialog\"\n  }\n}\n```\n\n2. 然后可以在对应页面的 wxml 中直接使用该组件\n\n```html\n<mp-dialog title=\"test\" show=\"{{true}}\" bindbuttontap=\"tapDialogButton\" buttons=\"{{buttons}}\">\n    <view>test content</view>\n</mp-dialog>\n```\n\n```js\nPage({\n  data: {\n    buttons: [{text: '取消'}, {text: '确认'}]\n  }\n})\n```\n\n完整的组件的使用文档请参考具体的组件的文档。\n\n## 修改组件内部样式\n每个组件可以设置`ext-class`这个属性，该属性提供设置在组件WXML顶部元素的class，组件的[addGlobalClass](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html#%E7%BB%84%E4%BB%B6%E6%A0%B7%E5%BC%8F%E9%9A%94%E7%A6%BB)的options都设置为true，所以可以在页面设置wxss样式来覆盖组件的内部样式。需要注意的是，如果要覆盖组件内部样式，必须wxss的样式选择器的优先级比组件内部样式优先级高。\n`addGlobalClass`在基础库2.2.3开始支持。\n\n## 适配 DarkMode\n\n在根结点（或组件的外层结点）增加属性 `data-weui-theme=\"dark\"`，即可把 WeUI 组件切换到 DarkMode 的表现，如:\n\n```html\n<view data-weui-theme=\"dark\">\n    ...\n</view>\n```\n\n也可以参考库中提供的 [Demo](https://github.com/wechat-miniprogram/weui-miniprogram/tree/master/tools/demo)。"
  },
  {
    "path": "docs/search.md",
    "content": "# Searchbar\n搜索组件Searchbar提供搜索的功能，并展示搜索的结果。\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-searchbar\": \"weui-miniprogram/searchbar/searchbar\"\n  }\n}\n```\n\n\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| focus | boolean | false | 否 | 是否在组件开始创建的时候focus搜索输入框 |\n| placeholder | string | 搜索 | 否 | 搜索输入框的placeholder |\n| value | string |  | 否 | 搜索输入框的默认值 |\n| search | function |  | 是 | 输入过程不断调用此函数得到新的搜索结果，参数是输入框的值value，返回Promise实例 |\n| throttle | number | 500 | 否 | 调用search函数的间隔，单位ms |\n| cancelText | string | 取消 | 否 | 取消按钮的文本 |\n| cancel | boolean | true | 否 | 是否显示取消按钮 |\n| bindfocus | eventhandle |  | 否 | 在输入框focus的时候触发事件 |\n| bindblur | eventhandle |  | 否 | 在输入框blur的时候触发事件 |\n| bindclear | eventhandle |  | 否 | 在clear按钮点击的时候触发事件 |\n| bindinput | eventhandle |  | 否 | 在输入框输入过程中触发事件 |\n| bindselectresult | eventhandle |  | 否 | 在选择搜索结果的时候触发事件 |\n"
  },
  {
    "path": "docs/slideview.md",
    "content": "# Slideview\n左滑删除组件，基础库 2.4.4 开始支持。\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-slideview\": \"weui-miniprogram/slideview/slideview\"\n  }\n}\n```\n\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| disable | boolean | false | 否 | 是否禁用slideview |\n| buttons | array\\<object\\> | [] | 是 | 左滑的按钮组，建议最多3个按钮 |\n| icon | boolean | false | 否 | 按钮是否是icon |\n| show | boolean |  | 否 | 是否显示slideview，可以控制隐藏显示 |\n| duration | boolean | 350 | 否 | slideview显示隐藏的动画的时长 |\n| throttle | number | 40 | 否 | 手指移动距离超过该值的时候，触发slideview的显示隐藏 |\n| bindbuttontap | eventhandler |  | 否 | buttons按钮组点击时触发的事件，detail为{index, data}，data是按钮的配置项传入的data参数 |\n| bindhide | eventhandler |  | 否 | 隐藏时触发的事件 |\n| bindshow | eventhandler |  | 否 | 显示时触发的事件 |\n\nbuttons提供按钮组配置，每一项表示一个按钮，每一项的属性为\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| extClass | string |  | 否 | 按钮的额外的class，可用于修改组件内部的样式 |\n| type | string | default | 否 | 按钮的类型，取值default和warn，warn是红色按钮 |\n| text | string |  | 否 | 按钮的文本 |\n| src | string |  | 否 | 如果icon为true，此属性有效 |\n| data | any |  | 否 | 触发bindbuttontap回传的数据 |\n"
  },
  {
    "path": "docs/tabbar.md",
    "content": "# Tabbar\nTabbar组件，也可以用来作为小程序的[自定义Tabbar](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html)使用\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-tabbar\": \"weui-miniprogram/tabbar/tabbar\"\n  }\n}\n```\n\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| list | array\\<object\\> |  | 否 | Tabbar的项的数组，按照规范，至少要有2个Tabbar项 |\n| current | number | 0 | 否 | 当前选中的Tabbar项的下标 |\n| bindchange | eventhandler |  | 否 | Tabbar项发生改变的时候触发此事件，detail为{index, item}，index是Tabbar下标，item是对应的Tabbar项的配置 |\n\nlist属性是对象数组，每一项表示一个Tabbar项，其字段含义为\n| 字段名 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| text | string |  | 是 | Tabbar项的标题 |\n| iconPath | string |  | 否 | Tabbar项的icon图片路径，建议使用绝对路径，相对路径要相对于组件所在目录的。 |\n| selectedIconPath | string |  | 否 | Tabbar项选中时的icon，建议使用绝对路径，相对路径要相对于组件所在目录的。 |\n| badge | string |  | 否 | 是否显示Tabbar的右上角的Badge |\n"
  },
  {
    "path": "docs/toptips.md",
    "content": "# Toptips\nToptips顶部错误提示组件，常用于表单校验或提交请求到后台成功或失败的错误提示，如下图所示。\n\n![](./img/toptips.png#width:300px)\n\n## 引入组件\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-toptips\": \"weui-miniprogram/toptips/toptips\"\n  }\n}\n```\n\n## 示例代码\n```html\n<!--WXML示例代码-->\n<mp-toptips msg=\"{{error}}\" type=\"error\" show=\"{{error}}\"></mp-toptips>\n```\n\n```js\n// page.js示例代码\nPage({\n    data: {\n        error: ''\n    },\n    onShow() {\n        this.setData({\n            error: '这是一个错误提示'\n        })\n    }\n});\n```\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| type | string |  | 否 | 提示类型，可以为info、error、success，表示三种提示颜色 |\n| show | boolean | false | 否 | 是否显示Toptips |\n| msg | string |  | 是 | 提示内容 |\n| delay | number | 2000 | 否 | 提示内容显示后隐藏的ms值 |\n| bindhide | eventhandler |  | 否 | 顶部提示隐藏的时候触发的事件 |\n"
  },
  {
    "path": "docs/uploader.md",
    "content": "# Uploader\n图片上传Uploader组件。\n\n## 代码引入\n在 page.json 中引入组件\n```json\n{\n  \"usingComponents\": {\n    \"mp-uploader\": \"weui-miniprogram/uploader/uploader\"\n  }\n}\n```\n\n\n## 属性列表\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| ext-class | string |  | 否 | 添加在组件内部结构的class，可用于修改组件内部的样式 |\n| title | string | 图片上传 | 否 | 组件标题 |\n| tips | string | | 否 | 组件的提示 |\n| delete | boolean | | 是 | 是否显示删除按钮 |\n| size-type | array |  | 是 | 和chooseImage的sizeType参数一样 |\n| source-type | array |  | 是 | 和chooseImage的sourceType参数一样 |\n| max-size | number | 5 * 1024 * 1024 | 是 | 图片上传的最大文件限制，默认是5M |\n| max-count | number | 1 | 否 | 图片上传的个数限制 |\n| files | array\\<object\\> |  | 否 | 当前的图片列表 |\n| select | function |  | 否 | 选择图片时的过滤函数，返回true表示图片有效 |\n| upload | function |  | 否 | 图片上传的函数，返回Promise，Promise的callback里面必须resolve({urls})表示成功，否则表示失败 |\n| bindselect | eventhandler |  | 否 | 图片选择触发的事件，detail为{tempFilePaths, tempFiles, contents},其中tempFiles和tempFilePaths是chooseImage返回的字段，contents表示所选的图片的二进制Buffer列表 |\n| bindcancel | eventhandler |  | 否 | 取消图片选择的事件，detail为{} |\n| bindsuccess | eventhandler |  | 否 | 图片上传成功的事件，detail为{urls}，urls为upload函数上传成功返回的urls参数 |\n| bindfail | eventhandler |  | 否 | 图片上传失败的事件，detail为{type, errMsg}，type为1表示图片超过大小限制，type为2表示选择图片失败，type为3表示图片上传失败。 |\n| binddelete | eventhandler |  | 否 | 删除图片触发的事件，detail为{index, item}，index表示删除的图片的下标，item为图片对象。 |\n\nfiles表示当前的图片列表，每一项的定义为\n| 属性 | 类型 | 默认值 | 必填 | 说明 |\n| ---- | ---- | ------ | -------- | ---- |\n| url | string |  | 是 | 图片链接 |\n| loading | boolean |  | 否 | 图片上传中 |\n| error | boolean |  | 否 | 图片上传失败 |\n"
  },
  {
    "path": "gulpfile.js",
    "content": "const gulp = require('gulp')\nconst clean = require('gulp-clean')\n\nconst config = require('./tools/config')\nconst BuildTask = require('./tools/build')\nconst id = require('./package.json').name || 'miniprogram-custom-component'\n\n// 构建任务实例\n// eslint-disable-next-line no-new\nnew BuildTask(id, config.entry)\n\n// 清空生成目录和文件\ngulp.task('clean', gulp.series(() => gulp.src(config.distPath, {read: false, allowEmpty: true}).pipe(clean()), done => {\n  if (config.isDev) {\n    return gulp.src(config.demoDist, {read: false, allowEmpty: true})\n      .pipe(clean())\n  }\n\n  return done()\n}))\n// 监听文件变化并进行开发模式构建\ngulp.task('watch', gulp.series(`${id}-watch`))\n// 开发模式构建\ngulp.task('dev', gulp.series(`${id}-dev`))\n// 生产模式构建\ngulp.task('default', gulp.series(`${id}-default`))\n// 构建demo\ngulp.task('demo', gulp.series(`${id}-demo`))\n"
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n    bail: 1,\n    verbose: true,\n    testEnvironment: 'jsdom',\n    testURL: 'https://jest.test',\n    moduleFileExtensions: ['js', 'ts'],\n    testMatch: ['<rootDir>/src/**/__test__/**/*.test.{js,ts}'],\n    collectCoverageFrom: [\n        '<rootDir>/src/**/*.{js,ts}',\n        '!<rootDir>/src/weui-wxss/**',\n        '!**/__test__/**'\n    ],\n    snapshotSerializers: ['miniprogram-simulate/jest-snapshot-plugin']\n}\n"
  },
  {
    "path": "mpflow.config.js",
    "content": "const TerserWebpackPlugin = require('terser-webpack-plugin')\n\nmodule.exports = {\n    appId: 'wxe5f52902cf4de896',\n    projectName: '小程序自定义组件',\n    app: (mode) => (mode !== 'production' ? 'src/app' : undefined),\n    pages: (mode) => (mode !== 'production' ? undefined : ['src/components/index']),\n    sourceMap: (mode) => mode !== 'production',\n    compileType: 'miniprogram',\n    outputDir: 'miniprogram_dist',\n    plugins: ['@mpflow/plugin-babel', '@mpflow/plugin-typescript', '@mpflow/plugin-css'],\n    minimize: false,\n    configureWebpackChain: (config) => {\n        config.plugin('terser').use(TerserWebpackPlugin, [\n            {\n                terserOptions: {\n                    compress: {\n                        directives: false\n                    }\n                }\n            }\n        ])\n    },\n    settings: {\n        urlCheck: true,\n        es6: false,\n        postcss: false,\n        preloadBackgroundData: false,\n        minified: false,\n        newFeature: true,\n        coverView: true,\n        nodeModules: true,\n        autoAudits: false,\n        showShadowRootInWxmlPanel: true,\n        scopeDataCheck: false,\n        checkInvalidKey: true,\n        checkSiteMap: true,\n        uploadWithSourceMap: true,\n        compileHotReLoad: false,\n        babelSetting: {\n            ignore: [],\n            disablePlugins: [],\n            outputPath: ''\n        },\n        useIsolateContext: true,\n        useCompilerModule: false,\n        userConfirmedUseCompilerModuleSwitch: false,\n        compileWorklet: true,\n        minifyWXSS: false\n    }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"weui-miniprogram\",\n  \"version\": \"1.5.6\",\n  \"description\": \"小程序 WeUI 组件库\",\n  \"main\": \"miniprogram_dist/index.js\",\n  \"files\": [\n    \"miniprogram_dist\"\n  ],\n  \"scripts\": {\n    \"submodule\": \"git submodule update --init --recursive\",\n    \"init\": \"npm run submodule && npm i\",\n    \"dev\": \"mpflow-service dev\",\n    \"dev:open\": \"mpflow-service dev --open\",\n    \"demo\": \"npm run dev\",\n    \"watch\": \"npm run dev\",\n    \"build\": \"mpflow-service build && npm run build-copy-weui && npm run build-fix-wxs\",\n    \"build-copy-weui\": \"mkdir -p ./miniprogram_dist/weui-wxss/dist/style/ && cp ./miniprogram_dist/index.wxss ./miniprogram_dist/weui-wxss/dist/style/weui.wxss\",\n    \"build-fix-wxs\": \"sed -i '' 's/\\\\/_commons/..\\\\/_commons/g' ./miniprogram_dist/slideview/slideview.wxml\",\n    \"prepublishOnly\": \"npm run build\",\n    \"dist\": \"npm run build\",\n    \"clean-dev\": \"gulp clean --develop\",\n    \"clean\": \"gulp clean\",\n    \"lint\": \"eslint \\\"src/**/*.js\\\"\",\n    \"lint-tools\": \"eslint \\\"tools/**/*.js\\\" --rule \\\"import/no-extraneous-dependencies: false\\\"\",\n    \"test\": \"jest\",\n    \"test-debug\": \"node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand --verbose\",\n    \"codecov\": \"jest --coverage && codecov\"\n  },\n  \"miniprogram\": \"miniprogram_dist\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/wechat-miniprogram/weui-miniprogram.git\"\n  },\n  \"publishConfig\": {\n    \"registry\": \"https://registry.npmjs.org\"\n  },\n  \"homepage\": \"https://github.com/wechat-miniprogram/weui-miniprogram\",\n  \"author\": \"xushengni,tomylin,cunjinli,rockhou\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@mpflow/plugin-babel\": \"^0.0.31\",\n    \"@mpflow/plugin-css\": \"^0.0.27\",\n    \"@mpflow/plugin-typescript\": \"^0.0.27\",\n    \"@mpflow/service\": \"^0.0.34\",\n    \"@types/jest\": \"^25.2.2\",\n    \"@typescript-eslint/eslint-plugin\": \"^2.23.0\",\n    \"@typescript-eslint/parser\": \"^2.23.0\",\n    \"autoprefixer\": \"^6.5.1\",\n    \"codecov\": \"^3.7.0\",\n    \"colors\": \"^1.3.1\",\n    \"eslint\": \"^5.14.1\",\n    \"eslint-config-airbnb-base\": \"13.1.0\",\n    \"eslint-config-prettier\": \"^6.10.1\",\n    \"eslint-loader\": \"^2.1.2\",\n    \"eslint-plugin-import\": \"^2.16.0\",\n    \"eslint-plugin-node\": \"^7.0.1\",\n    \"eslint-plugin-prettier\": \"^3.1.2\",\n    \"eslint-plugin-promise\": \"^3.8.0\",\n    \"gulp\": \"^4.0.0\",\n    \"gulp-clean\": \"^0.4.0\",\n    \"gulp-if\": \"^2.0.2\",\n    \"gulp-install\": \"^1.1.0\",\n    \"gulp-less\": \"^4.0.1\",\n    \"gulp-rename\": \"^1.4.0\",\n    \"gulp-sourcemaps\": \"^2.6.5\",\n    \"jest\": \"^25.5.4\",\n    \"jsdom\": \"^16.2.2\",\n    \"miniprogram-api-typings\": \"^2.6.5\",\n    \"miniprogram-simulate\": \"^1.5.8\",\n    \"prettier\": \"2.0.1\",\n    \"through2\": \"^2.0.3\",\n    \"tslint\": \"^5.13.1\",\n    \"tslint-loader\": \"^3.5.4\",\n    \"typescript\": \"^3.3.3333\",\n    \"vinyl\": \"^2.2.0\",\n    \"weui-wxss\": \"^2.6.17\"\n  }\n}\n"
  },
  {
    "path": "src/app.js",
    "content": "const themeListeners = []\n\nApp({\n    onLaunch: function () {\n        console.log('App Launch')\n        wx.onThemeChange(({ theme }) => {\n            this.themeChanged(theme)\n        })\n    },\n    onShow: function () {\n        console.log('App Show')\n    },\n    onHide: function () {\n        console.log('App Hide')\n    },\n    themeChanged(theme) {\n        this.globalData.theme = theme\n        themeListeners.forEach((listener) => {\n            listener(theme)\n        })\n    },\n    watchThemeChange(listener) {\n        if (themeListeners.indexOf(listener) < 0) {\n            themeListeners.push(listener)\n        }\n    },\n    unWatchThemeChange(listener) {\n        const index = themeListeners.indexOf(listener)\n        if (index > -1) {\n            themeListeners.splice(index, 1)\n        }\n    },\n    globalData: {\n        hasLogin: false,\n        theme: wx.getAppBaseInfo().theme,\n        GRID_DEMO_URL: '/example/index',\n        iconTabbar: require('/example/images/icon_tabbar.png').default\n    }\n})\n"
  },
  {
    "path": "src/app.json",
    "content": "{\n  \"pages\": [\n    \"example/index\",\n\n    \"example/button/button\",\n    \"example/cell/cell\",\n    \"example/slideview/slideview\",\n    \"example/form/form\",\n    \"example/form-page/form-page\",\n    \"example/slider/slider\",\n    \"example/uploader/uploader\",\n\n    \"example/article/article\",\n    \"example/badge/badge\",\n    \"example/flex/flex\",\n    \"example/footer/footer\",\n    \"example/gallery/gallery\",\n    \"example/grid/grid\",\n    \"example/icons/icons\",\n    \"example/loadmore/loadmore\",\n    \"example/loading/loading\",\n    \"example/panel/panel\",\n    \"example/preview/preview\",\n    \"example/progress/progress\",\n\n    \"example/actionsheet/actionsheet\",\n    \"example/dialog/dialog\",\n    \"example/msg/msg\",\n    \"example/msg/msg_text\",\n    \"example/msg/msg_text_primary\",\n    \"example/msg/msg_success\",\n    \"example/msg/msg_fail\",\n    \"example/half-screen-dialog/half-screen-dialog\",\n    \"example/picker/picker\",\n    \"example/toast/toast\",\n    \"example/toptips/toptips\",\n\n    \"example/navbar/navbar\",\n    \"example/navigation/navigation\",\n    \"example/tabbar/tabbar\",\n\n    \"example/searchbar/searchbar\"\n  ],\n  \"window\": {\n    \"navigationBarTextStyle\": \"black\",\n    \"navigationBarTitleText\": \"小程序UI组件库\",\n    \"navigationBarBackgroundColor\": \"#f8f8f8\",\n    \"backgroundColor\": \"#f8f8f8\"\n  },\n  \"networkTimeout\": {\n    \"request\": 10000,\n    \"connectSocket\": 10000,\n    \"uploadFile\": 10000,\n    \"downloadFile\": 10000\n  },\n  \"debug\": true,\n  \"style\": \"v2\",\n  \"darkmode\": true,\n  \"lazyCodeLoading\": \"requiredComponents\",\n  \"renderer\": \"skyline\",\n  \"rendererOptions\": {\n    \"skyline\": {\n      \"defaultDisplayBlock\": true,\n      \"defaultContentBox\": true\n    }\n  }\n}\n"
  },
  {
    "path": "src/app.less",
    "content": "@import \"./example/common.less\";\n\n.page {\n  display: flex;\n  width: 100vw;\n  height: 100vh;\n  flex-direction: column;\n}\n\n.page-height {\n  height: 100%;\n  flex: 1 1 0;\n  overflow: hidden;\n}\n\nnavigator text,\ntext text,\ntext navigator {\n  display: inline;\n}\n\n.wx-scroll-view-flex:is(div):not(.wx-scroll-view-flex) {\n  width: auto !important;\n}\n"
  },
  {
    "path": "src/base/CustomPage.js",
    "content": "import themeMixin from './behaviors/theme'\n\nconst CustomPage = function (options) {\n    return Page(\n        Object.assign({}, options, {\n            behaviors: [themeMixin].concat(options.behaviors || []),\n            onLoad(query) {\n                const app = getApp()\n                this.themeChanged(app.globalData.theme)\n                app.watchThemeChange && app.watchThemeChange(this.themeChanged)\n                options.onLoad && options.onLoad.call(this, query)\n            },\n            onUnload() {\n                const app = getApp()\n                app.unWatchThemeChange && app.unWatchThemeChange(this.themeChanged)\n                options.onUnload && options.onUnload.call(this)\n            }\n        })\n    )\n}\n\nexport default CustomPage\n"
  },
  {
    "path": "src/base/behaviors/theme.js",
    "content": "module.exports = Behavior({\n    data: {\n        theme: 'light'\n    },\n    methods: {\n        themeChanged(theme) {\n            this.setData({\n                theme\n            })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/actionsheet/__test__/__snapshots__/actionsheet.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`actionsheet basic actionsheet 1`] = `\n<main>\n  <mp-actionsheet\n    class=\"comp\"\n    bind:actiontap=\"actiontap\"\n    bind:close=\"close\"\n  >\n    <wx-root-portal\n      enable=\"{{true}}\"\n    >\n      <wx-view\n        class=\"root-portal-box\"\n      >\n        <wx-view\n          ariaLabel=\"关闭\"\n          ariaRole=\"button\"\n          class=\"weui-mask weui-animate-fade-in customer-mask-class\"\n          bind:tap=\"closeActionSheet\"\n        />\n        <wx-view\n          ariaModal=\"true\"\n          ariaRole=\"dialog\"\n          class=\"weui-actionsheet \"\n        >\n          <wx-view\n            class=\"weui-actionsheet__title\"\n            tabindex=\"0\"\n          >\n            <wx-view\n              class=\"weui-actionsheet__title-text\"\n            >\n              actionsheet title\n            </wx-view>\n          </wx-view>\n          <wx-view\n            class=\"weui-actionsheet__menu\"\n          >\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-actionsheet__cell \"\n              data-groupindex=\"{{0}}\"\n              data-index=\"{{0}}\"\n              data-value=\"{{1}}\"\n              hoverClass=\"weui-active\"\n              bind:tap=\"buttonTap\"\n            >\n              \n                        item 1\n                    \n            </wx-view>\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-actionsheet__cell \"\n              data-groupindex=\"{{0}}\"\n              data-index=\"{{1}}\"\n              data-value=\"{{2}}\"\n              hoverClass=\"weui-active\"\n              bind:tap=\"buttonTap\"\n            >\n              \n                        item 2\n                    \n            </wx-view>\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-actionsheet__cell weui-actionsheet__cell_warn\"\n              data-groupindex=\"{{0}}\"\n              data-index=\"{{2}}\"\n              data-value=\"{{3}}\"\n              hoverClass=\"weui-active\"\n              bind:tap=\"buttonTap\"\n            >\n              \n                        item 3\n                    \n            </wx-view>\n          </wx-view>\n          <wx-view\n            class=\"weui-actionsheet__action\"\n          >\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-actionsheet__cell weui-actionsheet__cell_cancel\"\n              data-type=\"close\"\n              hoverClass=\"weui-active\"\n              id=\"iosActionsheetCancel\"\n              bind:tap=\"closeActionSheet\"\n            >\n              actionsheet cancel text\n            </wx-view>\n          </wx-view>\n        </wx-view>\n      </wx-view>\n    </wx-root-portal>\n  </mp-actionsheet>\n</main>\n`;\n\nexports[`actionsheet no cancel 1`] = `\n<main>\n  <mp-actionsheet\n    class=\"comp\"\n    bind:actiontap=\"actiontap\"\n    bind:close=\"close\"\n  >\n    <wx-root-portal\n      enable=\"{{true}}\"\n    >\n      <wx-view\n        class=\"root-portal-box\"\n      >\n        <wx-view\n          ariaLabel=\"关闭\"\n          ariaRole=\"button\"\n          class=\"weui-mask weui-animate-fade-in customer-mask-class\"\n          bind:tap=\"closeActionSheet\"\n        />\n        <wx-view\n          ariaModal=\"true\"\n          ariaRole=\"dialog\"\n          class=\"weui-actionsheet \"\n        >\n          <wx-view\n            class=\"weui-actionsheet__title\"\n            tabindex=\"0\"\n          >\n            <wx-view\n              class=\"weui-actionsheet__title-text\"\n            >\n              actionsheet title\n            </wx-view>\n          </wx-view>\n          <wx-view\n            class=\"weui-actionsheet__action\"\n          >\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-actionsheet__cell \"\n              data-groupindex=\"{{0}}\"\n              data-index=\"{{0}}\"\n              data-value=\"{{1}}\"\n              hoverClass=\"weui-active\"\n              bind:tap=\"buttonTap\"\n            >\n              \n                        item 1\n                    \n            </wx-view>\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-actionsheet__cell \"\n              data-groupindex=\"{{0}}\"\n              data-index=\"{{1}}\"\n              data-value=\"{{2}}\"\n              hoverClass=\"weui-active\"\n              bind:tap=\"buttonTap\"\n            >\n              \n                        item 2\n                    \n            </wx-view>\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-actionsheet__cell weui-actionsheet__cell_warn\"\n              data-groupindex=\"{{0}}\"\n              data-index=\"{{2}}\"\n              data-value=\"{{3}}\"\n              hoverClass=\"weui-active\"\n              bind:tap=\"buttonTap\"\n            >\n              \n                        item 3\n                    \n            </wx-view>\n          </wx-view>\n        </wx-view>\n      </wx-view>\n    </wx-root-portal>\n  </mp-actionsheet>\n</main>\n`;\n\nexports[`actionsheet show on create 1`] = `\n<main\n  show=\"{{true}}\"\n>\n  <mp-actionsheet\n    class=\"comp\"\n    bind:actiontap=\"actiontap\"\n    bind:close=\"close\"\n  >\n    <wx-root-portal\n      enable=\"{{true}}\"\n    >\n      <wx-view\n        class=\"root-portal-box\"\n      >\n        <wx-view\n          ariaLabel=\"关闭\"\n          ariaRole=\"button\"\n          class=\"weui-mask weui-animate-fade-in customer-mask-class\"\n          bind:tap=\"closeActionSheet\"\n        />\n        <wx-view\n          ariaModal=\"true\"\n          ariaRole=\"dialog\"\n          class=\"weui-actionsheet \"\n        >\n          <wx-view\n            class=\"weui-actionsheet__title\"\n            tabindex=\"0\"\n          >\n            <wx-view\n              class=\"weui-actionsheet__title-text\"\n            >\n              actionsheet title\n            </wx-view>\n          </wx-view>\n          <wx-view\n            class=\"weui-actionsheet__menu\"\n          >\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-actionsheet__cell \"\n              data-groupindex=\"{{0}}\"\n              data-index=\"{{0}}\"\n              data-value=\"{{1}}\"\n              hoverClass=\"weui-active\"\n              bind:tap=\"buttonTap\"\n            >\n              \n                        item 1\n                    \n            </wx-view>\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-actionsheet__cell \"\n              data-groupindex=\"{{0}}\"\n              data-index=\"{{1}}\"\n              data-value=\"{{2}}\"\n              hoverClass=\"weui-active\"\n              bind:tap=\"buttonTap\"\n            >\n              \n                        item 2\n                    \n            </wx-view>\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-actionsheet__cell weui-actionsheet__cell_warn\"\n              data-groupindex=\"{{0}}\"\n              data-index=\"{{2}}\"\n              data-value=\"{{3}}\"\n              hoverClass=\"weui-active\"\n              bind:tap=\"buttonTap\"\n            >\n              \n                        item 3\n                    \n            </wx-view>\n          </wx-view>\n          <wx-view\n            class=\"weui-actionsheet__action\"\n          >\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-actionsheet__cell weui-actionsheet__cell_cancel\"\n              data-type=\"close\"\n              hoverClass=\"weui-active\"\n              id=\"iosActionsheetCancel\"\n              bind:tap=\"closeActionSheet\"\n            >\n              actionsheet cancel text\n            </wx-view>\n          </wx-view>\n        </wx-view>\n      </wx-view>\n    </wx-root-portal>\n  </mp-actionsheet>\n</main>\n`;\n"
  },
  {
    "path": "src/components/actionsheet/__test__/actionsheet.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('actionsheet', () => {\n    let id: string\n\n    beforeAll(() => {\n        id = simulate.load(path.resolve(__dirname, './index'))\n    })\n\n    test('basic actionsheet', async () => {\n        const container = simulate.render(id)\n        container.attach(document.createElement('parent-wrapper'))\n\n        expect(container.toJSON()).toMatchSnapshot()\n    })\n\n    test('show on create', async () => {\n        const container = simulate.render(id, { show: true })\n        container.attach(document.createElement('parent-wrapper'))\n\n        expect(container.toJSON()).toMatchSnapshot()\n    })\n\n    test('no cancel', async () => {\n        const container = simulate.render(id, { showCancel: false })\n        container.attach(document.createElement('parent-wrapper'))\n\n        expect(container.toJSON()).toMatchSnapshot()\n    })\n\n    test('touch', async () => {\n        const container = simulate.render(id)\n        container.attach(document.createElement('parent-wrapper'))\n        const comp = container.querySelector('.comp')\n\n        const menu = comp.querySelectorAll('.weui-actionsheet__menu .weui-actionsheet__cell')\n\n        menu[2].dispatchEvent('touchstart')\n        menu[2].dispatchEvent('touchend')\n        await simulate.sleep(10)\n        expect(container.data.tapValue).toBe(3)\n\n        menu[1].dispatchEvent('touchstart')\n        menu[1].dispatchEvent('touchend')\n        await simulate.sleep(10)\n        expect(container.data.tapValue).toBe(2)\n    })\n\n    test('close', async () => {\n        const container = simulate.render(id)\n        container.attach(document.createElement('parent-wrapper'))\n        const comp = container.querySelector('.comp')\n\n        const cancel = comp.querySelector('.weui-actionsheet__action .weui-actionsheet__cell')\n\n        cancel.dispatchEvent('touchstart')\n        cancel.dispatchEvent('touchend')\n        await simulate.sleep(10)\n        expect(container.data.show).toBe(false)\n        expect(comp.data.show).toBe(false)\n    })\n})\n"
  },
  {
    "path": "src/components/actionsheet/__test__/index.json",
    "content": "{\n    \"component\": true,\n    \"usingComponents\": {\n        \"mp-actionsheet\": \"../actionsheet\"\n    }\n}"
  },
  {
    "path": "src/components/actionsheet/__test__/index.ts",
    "content": "Component({\n    properties: {\n        showCancel: {\n            type: Boolean,\n            value: true\n        }\n    },\n    data: {\n        tapValue: 0,\n        show: true,\n        actions: [\n            { text: 'item 1', value: 1 },\n            { text: 'item 2', value: 2 },\n            { text: 'item 3', type: 'warn', value: 3 }\n        ]\n    },\n    methods: {\n        actiontap(event): void {\n            this.setData({\n                tapValue: event.detail.value\n            })\n        },\n        close(): void {\n            this.setData({\n                show: false\n            })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/actionsheet/__test__/index.wxml",
    "content": "<mp-actionsheet\n    class=\"comp\"\n    title=\"actionsheet title\"\n    show-cancel=\"{{showCancel}}\"\n    cancel-text=\"actionsheet cancel text\"\n    show=\"{{show}}\"\n    mask-class=\"customer-mask-class\"\n    actions=\"{{actions}}\"\n    bindactiontap=\"actiontap\"\n    bindclose=\"close\"\n>\n</mp-actionsheet>\n"
  },
  {
    "path": "src/components/actionsheet/actionsheet.json",
    "content": "{\n  \"component\": true,\n  \"styleIsolation\": \"apply-shared\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/actionsheet/actionsheet.less",
    "content": ".weui-actionsheet__action {\n  padding-bottom: 0;\n}\n\n.weui-actionsheet__cell_cancel {\n  padding-bottom: calc(16px + env(safe-area-inset-bottom));\n}\n\n.weui-actionsheet__title:focus {\n  outline: none;\n}\n\n.weui-actionsheet {\n    transform: none;\n    -webkit-transform: none;\n}\n\n// FIXME: skyline animation 暂有 scope 的 bug\n.weui-animate-fade-in {\n    animation: weuiFadeIn ease 0.3s forwards;\n}\n\n@keyframes weuiFadeIn {\n    from {\n        opacity: 0;\n    }\n    to {\n        opacity: 1;\n    }\n}\n\n.weui-animate-fade-out {\n    animation: weuiFadeOut ease 0.3s forwards;\n}\n\n@keyframes weuiFadeOut {\n    from {\n        opacity: 1;\n    }\n    to {\n        opacity: 0;\n    }\n}\n\n.weui-animate-slide-up {\n    animation: weuiSlideUp ease 0.3s forwards;\n}\n\n@keyframes weuiSlideUp {\n    from {\n        transform: translate3d(0, 100%, 0);\n    }\n    to {\n        transform: translateZ(0);\n    }\n}\n\n.weui-animate-slide-down {\n    animation: weuiSlideDown ease 0.3s forwards;\n}\n\n@keyframes weuiSlideDown {\n    from {\n        transform: translateZ(0);\n    }\n    to {\n        transform: translate3d(0, 100%, 0);\n    }\n}\n"
  },
  {
    "path": "src/components/actionsheet/actionsheet.ts",
    "content": "Component({\n    options: {\n        multipleSlots: true // 在组件定义时的选项中启用多slot支持\n    },\n    properties: {\n        title: {\n            // 标题\n            type: String,\n            value: ''\n        },\n        showCancel: {\n            // 是否显示取消按钮\n            type: Boolean,\n            value: true\n        },\n        cancelText: {\n            // 取消按钮文案\n            type: String,\n            value: '取消'\n        },\n        maskClass: {\n            // 遮罩层class\n            type: String,\n            value: ''\n        },\n        extClass: {\n            // 弹出窗 class\n            type: String,\n            value: ''\n        },\n        maskClosable: {\n            // 点击遮罩 关闭 actionsheet\n            type: Boolean,\n            value: true\n        },\n        mask: {\n            // 是否需要 遮罩层\n            type: Boolean,\n            value: true\n        },\n        show: {\n            // 是否开启 actionsheet\n            type: Boolean,\n            value: false,\n            observer: '_showChange'\n        },\n        actions: {\n            // actions 列表\n            type: Array,\n            value: [], // {text, extClass}\n            observer: '_groupChange'\n        },\n        rootPortal: {\n            // 是否使用 root-portal\n            type: Boolean,\n            value: false\n        }\n    },\n\n    data: {\n        wrapperShow: false,\n        innerShow: false\n    },\n\n    lifetimes: {\n        ready() {\n            this._showChange(this.data.show)\n        }\n    },\n\n    methods: {\n        _showChange(show) {\n            if (show) {\n                this.setData({\n                    wrapperShow: true,\n                    innerShow: true\n                })\n            } else {\n                this.setData({\n                    innerShow: false\n                })\n                setTimeout(() => {\n                    this.setData({ wrapperShow: false })\n                }, 300)\n            }\n        },\n        _groupChange(e): void {\n            // 支持 一维数组 写法\n            if (e.length > 0 && typeof e[0] !== 'string' && !(e[0] instanceof Array)) {\n                this.setData({\n                    actions: [this.data.actions]\n                })\n            }\n        },\n        buttonTap(e): void {\n            const { value, groupindex, index } = e.currentTarget.dataset\n            this.triggerEvent('actiontap', { value, groupindex, index })\n        },\n        closeActionSheet(e): void {\n            const { type } = e.currentTarget.dataset\n            if (this.data.maskClosable || type) {\n                // 点击 action 里面的 取消\n                this.setData({\n                    show: false\n                })\n                // 关闭回调事件\n                this.triggerEvent('close')\n            }\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/actionsheet/actionsheet.wxml",
    "content": "<wxs module=\"utils\">\n    var join = function(a,b) {\n        return a+b\n    };\n    var isNotSlot = function(v) {\n        return typeof v !== 'string'\n    }\n    module.exports = {\n        join: join,\n        isNotSlot: isNotSlot\n    }\n</wxs>\n\n<template name=\"body\">\n    <view\n        wx:if=\"{{mask}}\"\n        class=\"weui-mask {{innerShow ? 'weui-animate-fade-in' : 'weui-animate-fade-out'}} {{maskClass}}\"\n        bindtap=\"closeActionSheet\"\n        aria-role=\"button\"\n        aria-label=\"关闭\"\n    ></view>\n    <view\n        class=\"weui-actionsheet {{innerShow ? 'weui-animate-slide-up' : 'weui-animate-slide-down'}} {{extClass}}\"\n        aria-role=\"dialog\"\n        aria-modal=\"true\"\n    >\n        <!-- 标题 -->\n        <block wx:if=\"{{title}}\">\n            <view class=\"weui-actionsheet__title\" tabindex=\"0\">\n                <view class=\"weui-actionsheet__title-text\">{{title}}</view>\n            </view>\n        </block>\n        <slot name=\"title\" wx:else></slot>\n        <view\n            class=\"{{ !showCancel && index === actions.length-1 ? 'weui-actionsheet__action' : 'weui-actionsheet__menu' }}\"\n            wx:key=\"index\"\n            wx:for-item=\"actionItem\"\n            wx:for-index=\"index\"\n            wx:for=\"{{actions}}\"\n        >\n            <block wx:if=\"{{utils.isNotSlot(actionItem)}}\">\n                <view\n                    class=\"weui-actionsheet__cell {{item.type === 'warn' ? 'weui-actionsheet__cell_warn' : '' }}\"\n                    aria-role=\"button\"\n                    hover-class=\"weui-active\"\n                    wx:key=\"actionIndex\"\n                    wx:for=\"{{actionItem}}\"\n                    wx:for-index=\"actionIndex\"\n                    data-groupindex=\"{{index}}\"\n                    data-index=\"{{actionIndex}}\"\n                    data-value=\"{{item.value}}\"\n                    bindtap=\"buttonTap\"\n                >\n                    {{item.text}}\n                </view>\n            </block>\n            <slot name=\"{{actionItem}}\" wx:else></slot>\n        </view>\n        <!-- 取消按钮 -->\n        <view class=\"weui-actionsheet__action\" wx:if=\"{{showCancel}}\">\n            <view\n                class=\"weui-actionsheet__cell weui-actionsheet__cell_cancel\"\n                hover-class=\"weui-active\"\n                data-type=\"close\"\n                id=\"iosActionsheetCancel\"\n                bindtap=\"closeActionSheet\"\n                aria-role=\"button\"\n            >{{cancelText}}</view>\n        </view>\n    </view>\n</template>\n\n<root-portal enable=\"{{true}}\" wx:if=\"{{rootPortal && wrapperShow}}\">\n    <view class=\"root-portal-box\">\n        <template is=\"body\" data=\"{{mask, innerShow, maskClass, extClass, title, showCancel, cancelText, maskClosable, actions}}\" />\n    </view>\n</root-portal>\n<block wx:elif=\"{{!rootPortal && wrapperShow}}\">\n    <template is=\"body\" data=\"{{mask, innerShow, maskClass, extClass, title, showCancel, cancelText, maskClosable, actions}}\" />\n</block>\n"
  },
  {
    "path": "src/components/badge/__test__/__snapshots__/badage.test.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`badge badge with content 1`] = `\n<main>\n  <wx-view\n    ariaLabel=\"\"\n    class=\"weui-badge  \"\n  >\n    badge content\n  </wx-view>\n</main>\n`;\n\nexports[`badge badge without content 1`] = `\n<main>\n  <wx-view\n    ariaLabel=\"\"\n    class=\"weui-badge  weui-badge_dot\"\n  >\n    \n  </wx-view>\n</main>\n`;\n"
  },
  {
    "path": "src/components/badge/__test__/badage.test.js",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('badge', () => {\n    let id\n\n    beforeAll(() => {\n        id = simulate.load(path.resolve(__dirname, '../badge'), { less: true })\n    })\n\n    test('badge with content', () => {\n        const content = 'badge content'\n        const comp = simulate.render(id, {\n            content: content\n        })\n        comp.attach(document.createElement('parent-wrapper'))\n\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n\n    test('badge without content', () => {\n        const comp = simulate.render(id, {})\n        comp.attach(document.createElement('parent-wrapper'))\n\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n})\n"
  },
  {
    "path": "src/components/badge/badge.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/badge/badge.less",
    "content": ""
  },
  {
    "path": "src/components/badge/badge.ts",
    "content": "Component({\n    properties: {\n        extClass: {\n            type: String,\n            value: ''\n        },\n        content: {\n            type: String,\n            value: ''\n        },\n        ariaLabel: {\n            type: String,\n            value: ''\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/badge/badge.wxml",
    "content": "<view class=\"weui-badge {{extClass}} {{!content ? 'weui-badge_dot' : ''}}\" aria-label=\"{{ariaLabel}}\">{{content}}</view>"
  },
  {
    "path": "src/components/cell/cell.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {\n        \"mp-cells\": \"../cells/cells\"\n    }\n}"
  },
  {
    "path": "src/components/cell/cell.less",
    "content": ".weui-cell_wxss.weui-cell_wxss::before{\n  display: flex;\n}\n\n/* skyline 不支持 currentColor */\n.weui-cell_access .weui-cell__ft::after {\n    background-color: var(--weui-FG-2);\n}\n"
  },
  {
    "path": "src/components/cell/cell.ts",
    "content": "Component({\n    options: {\n        multipleSlots: true\n    },\n    properties: {\n        hover: {\n            type: Boolean,\n            value: false\n        },\n        link: {\n            type: Boolean,\n            value: false\n        },\n        extClass: {\n            type: String,\n            value: ''\n        },\n        iconClass: {\n            type: String,\n            value: ''\n        },\n        bodyClass: {\n            type: String,\n            value: ''\n        },\n        icon: {\n            type: String,\n            value: ''\n        },\n        title: {\n            // 和icon二选一，都是放在cell_hd里面\n            type: String,\n            value: ''\n        },\n        value: {\n            type: String,\n            value: ''\n        },\n        showError: {\n            type: Boolean,\n            value: false\n        },\n        prop: {\n            // 校验的属性，给父元素form使用\n            type: String,\n            value: ''\n        },\n        url: {\n            // 在link为true的时候有效，表示navigator的跳转url\n            type: String,\n            value: ''\n        },\n        footerClass: {\n            type: String,\n            value: ''\n        },\n        footer: {\n            type: String,\n            value: ''\n        },\n        inline: {\n            // 左右布局样式还是上下布局\n            type: Boolean,\n            value: true\n        },\n        hasHeader: {\n            type: Boolean,\n            value: true\n        },\n        hasFooter: {\n            type: Boolean,\n            value: true\n        },\n        hasBody: {\n            type: Boolean,\n            value: true\n        },\n        extHoverClass: {\n            // 提供给需要定制 hover-class 的场景，要求 hover 为 false\n            type: String,\n            value: ''\n        },\n        ariaRole: {\n            type: String,\n            value: ''\n        }\n    },\n    relations: {\n        '../form/form': {\n            type: 'ancestor'\n        },\n        '../cells/cells': {\n            type: 'ancestor'\n        }\n    },\n    data: {\n        inForm: false\n    },\n    methods: {\n        setError(error) {\n            this.setData({\n                error: error || false\n            })\n        },\n        setInForm() {\n            this.setData({\n                inForm: true\n            })\n        },\n        setOuterClass(className) {\n            this.setData({\n                outerClass: className\n            })\n        },\n        navigateTo() {\n            const data: any = this.data\n            if (data.url && data.link) {\n                wx.navigateTo({\n                    url: data.url,\n                    success: (res) => {\n                        this.triggerEvent('navigatesuccess', res, {})\n                    },\n                    fail: (fail) => {\n                        this.triggerEvent('navigateerror', fail, {})\n                    }\n                })\n            }\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/cell/cell.wxml",
    "content": "<view\n    bindtap=\"navigateTo\"\n    class=\"weui-cell {{link ? 'weui-cell_access' : ''}} {{extClass}} {{outerClass}} {{inForm ? ' weui-cell-inform' : ''}}{{inline ? '' : 'weui-cell_label-block'}}\"\n    hover-class=\"{{hover ? 'weui-hover-active' : extHoverClass}}\"\n    aria-role=\"{{ariaRole}}\"\n>\n    <view wx:if=\"{{hasHeader}}\" class=\"weui-cell__hd {{iconClass}}\">\n        <block wx:if=\"{{icon}}\">\n            <image src=\"{{icon}}\" class=\"weui-cell__icon\" mode=\"aspectFit\"></image>\n        </block>\n        <block wx:else>\n            <slot name=\"icon\"></slot>\n        </block>\n        <block wx:if=\"{{inForm}}\">\n            <block wx:if=\"{{title}}\"><view class=\"weui-label\">{{title}}</view></block>\n            <block wx:else>\n                <slot name=\"title\"></slot>\n            </block>\n        </block>\n        <block wx:else>\n            <block wx:if=\"{{title}}\">{{title}}</block>\n            <block wx:else>\n                <slot name=\"title\"></slot>\n            </block>\n        </block>\n    </view>\n    <view wx:if=\"{{hasBody}}\" class=\"weui-cell__bd\">\n        <block wx:if=\"{{value}}\">{{value}}</block>\n        <block wx:else>\n            <slot></slot>\n        </block>\n    </view>\n    <view wx:if=\"{{hasFooter}}\" class=\"weui-cell__ft weui-cell__ft_in-access {{footerClass}}\">\n        <block wx:if=\"{{footer}}\">{{footer}}</block>\n        <block wx:else>\n            <slot name=\"footer\"></slot>\n        </block>\n        <icon wx:if=\"{{showError && error}}\" type=\"warn\" size=\"23\" color=\"#E64340\"></icon>\n    </view>\n</view>\n"
  },
  {
    "path": "src/components/cells/__test__/__snapshots__/cells.test.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`cells & cell basic cells & cell 1`] = `\n<main>\n  <mp-cells\n    class=\"cells\"\n  >\n    <wx-view\n      ariaRole=\"\"\n      class=\" weui-cells__group  \"\n    >\n      <wx-view\n        class=\"weui-cells__title\"\n      >\n        带图标、说明的列表项\n      </wx-view>\n      <wx-view\n        class=\"weui-cells weui-cells_after-title \"\n      >\n        <mp-cell\n          class=\"cell1\"\n        >\n          <wx-view\n            ariaRole=\"\"\n            class=\"weui-cell    \"\n            hoverClass=\"\"\n            bind:tap=\"navigateTo\"\n          >\n            <wx-view\n              class=\"weui-cell__hd \"\n            >\n              <wx-image\n                class=\"weui-cell__icon\"\n                mode=\"aspectFit\"\n                src=\"success\"\n              />\n            </wx-view>\n            <wx-view\n              class=\"weui-cell__bd\"\n            >\n              标题文字\n            </wx-view>\n            <wx-view\n              class=\"weui-cell__ft weui-cell__ft_in-access \"\n            >\n              说明文字\n            </wx-view>\n          </wx-view>\n        </mp-cell>\n        <mp-cell\n          class=\"cell2\"\n        >\n          <wx-view\n            ariaRole=\"\"\n            class=\"weui-cell   weui-cell_wxss \"\n            hoverClass=\"\"\n            bind:tap=\"navigateTo\"\n          >\n            <wx-view\n              class=\"weui-cell__hd \"\n            />\n            <wx-view\n              class=\"weui-cell__bd\"\n            >\n              标题文字\n            </wx-view>\n            <wx-view\n              class=\"weui-cell__ft weui-cell__ft_in-access \"\n            >\n              说明文字\n            </wx-view>\n          </wx-view>\n        </mp-cell>\n      </wx-view>\n      <wx-view\n        class=\"weui-cells__tips\"\n      >\n        底部说明文字\n      </wx-view>\n    </wx-view>\n  </mp-cells>\n</main>\n`;\n"
  },
  {
    "path": "src/components/cells/__test__/cells.test.js",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('cells & cell', () => {\n    let id\n\n    beforeAll(() => {\n        id = simulate.load(path.resolve(__dirname, './index'), { less: true })\n    })\n\n    test('basic cells & cell', async () => {\n        const container = simulate.render(id)\n        container.attach(document.createElement('parent-wrapper'))\n        expect(container.toJSON()).toMatchSnapshot()\n    })\n})\n"
  },
  {
    "path": "src/components/cells/__test__/index.js",
    "content": "Component({\n    data: {\n        tapValue: 0,\n        actions: [\n            { text: 'item 1', value: 1 },\n            { text: 'item 2', value: 2 },\n            { text: 'item 3', type: 'warn', value: 3 }\n        ]\n    },\n    methods: {\n        actiontap(event) {\n            this.setData({\n                tapValue: event.detail.value\n            })\n        },\n        close() {\n            this.setData({\n                close: 'true'\n            })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/cells/__test__/index.json",
    "content": "{\n    \"component\": true,\n    \"usingComponents\": {\n        \"mp-cells\": \"../../cells/cells\",\n        \"mp-cell\": \"../../cell/cell\"\n    }\n}"
  },
  {
    "path": "src/components/cells/__test__/index.wxml",
    "content": "<mp-cells class=\"cells\" title=\"带图标、说明的列表项\" footer=\"底部说明文字\">\n    <mp-cell class=\"cell1\" value=\"标题文字\" footer=\"说明文字\" icon=\"success\"></mp-cell>\n    <mp-cell class=\"cell2\" value=\"标题文字\" footer=\"说明文字\"></mp-cell>\n</mp-cells>"
  },
  {
    "path": "src/components/cells/cells.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/cells/cells.less",
    "content": ".weui-cells__group_wxss.weui-cells__group_wxss .weui-cells__title {\n  margin-top: 24px;\n}\n.weui-cells__group_form .weui-cells__tips {\n  margin-top: 8px;\n  padding: 0 32px;\n  color: var(--weui-FG-1);\n}\n"
  },
  {
    "path": "src/components/cells/cells.ts",
    "content": "// import checkboxGroup from \"../checkbox-group/checkbox-group\"\n\nComponent({\n    options: {\n        multipleSlots: true\n    },\n    properties: {\n        title: {\n            type: String,\n            value: ''\n        },\n        extClass: {\n            type: String,\n            value: ''\n        },\n        footer: {\n            type: String,\n            value: ''\n        },\n        ariaRole: {\n            type: String,\n            value: ''\n        }\n    },\n    data: {\n        firstItem: null,\n        checkboxCount: 0,\n        checkboxIsMulti: false,\n        outerClass: '',\n        childClass: ''\n    },\n    relations: {\n        '../cell/cell': {\n            type: 'descendant',\n            linked(target) {\n                if (!this.data.firstItem) {\n                    this.data.firstItem = target\n                }\n                if (target !== this.data.firstItem) {\n                    target.setOuterClass('weui-cell_wxss')\n                }\n            }\n        },\n        '../form-page/form-page': {\n            type: 'ancestor'\n        },\n        '../checkbox-group/checkbox-group': {\n            type: 'descendant',\n            // target: checkboxGroup,\n            linked(target) {\n                this.setData({\n                    checkboxCount: this.data.checkboxCount + 1,\n                    checkboxIsMulti: target.data.multi\n                })\n            },\n            unlinked(target) {\n                this.setData({\n                    checkboxCount: this.data.checkboxCount - 1,\n                    checkboxIsMulti: target.data.multi\n                })\n            }\n        }\n    },\n    methods: {\n        setCellMulti(multi) {\n            this.setData({\n                checkboxIsMulti: multi\n            })\n        },\n        setCellsClass(className) {\n            this.setData({\n                childClass: className\n            })\n        },\n        setOuterClass(className) {\n            this.setData({\n                outerClass: className\n            })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/cells/cells.wxml",
    "content": "<view class=\"{{extClass}} weui-cells__group {{outerClass}} {{childClass}}\" aria-role=\"{{ariaRole}}\">\n    <view wx:if=\"{{title}}\" class=\"weui-cells__title\">{{title}}</view>\n    <view class=\"weui-cells weui-cells_after-title {{checkboxCount > 0 && checkboxIsMulti ? 'weui-cells_checkbox' : ''}}\">\n        <slot></slot>\n    </view>\n    <view wx:if=\"{{footer}}\" class=\"weui-cells__tips\">{{footer}}</view>\n    <slot name=\"footer\" wx:else></slot>\n</view>"
  },
  {
    "path": "src/components/checkbox/__test__/__snapshots__/checkbox.test.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`checkbox-group & checkbox basic checkbox 1`] = `\n<main>\n  <mp-cells\n    title=\"单选列表项\"\n  >\n    <mp-checkbox-group\n      class=\"radio-group\"\n      bind:change=\"radioChange\"\n    >\n      <wx-radio-group\n        class=\"\"\n        bind:change=\"checkedChange\"\n      >\n        <mp-checkbox\n          class=\"test-radio\"\n        >\n          <wx-label\n            bind:tap=\"checkedChange\"\n          >\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell  weui-check__label   ^weui-cell_radio  \"\n                hoverClass=\"weui-active\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-view>\n                    cell standard\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                >\n                  <wx-view\n                    slot=\"footer\"\n                  >\n                    <wx-radio\n                      checked=\"{{false}}\"\n                      class=\"weui-check\"\n                      color=\"\"\n                      disabled=\"{{false}}\"\n                      value=\"0\"\n                    />\n                    <wx-view\n                      class=\"weui-icon-checked checkbox--weui-icon-checked \"\n                    />\n                  </wx-view>\n                </wx-view>\n              </wx-view>\n            </mp-cell>\n          </wx-label>\n        </mp-checkbox>\n        <mp-checkbox\n          class=\"test-radio\"\n        >\n          <wx-label\n            bind:tap=\"checkedChange\"\n          >\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell  weui-check__label weui-cell_wxss  ^weui-cell_radio  \"\n                hoverClass=\"weui-active\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-view>\n                    cell standard\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                >\n                  <wx-view\n                    slot=\"footer\"\n                  >\n                    <wx-radio\n                      checked=\"{{false}}\"\n                      class=\"weui-check\"\n                      color=\"\"\n                      disabled=\"{{false}}\"\n                      value=\"1\"\n                    />\n                    <wx-view\n                      class=\"weui-icon-checked checkbox--weui-icon-checked \"\n                    />\n                  </wx-view>\n                </wx-view>\n              </wx-view>\n            </mp-cell>\n          </wx-label>\n        </mp-checkbox>\n      </wx-radio-group>\n    </mp-checkbox-group>\n  </mp-cells>\n  <mp-cells\n    title=\"复选列表项\"\n  >\n    <mp-checkbox-group\n      class=\"checkbox-group\"\n      bind:change=\"checkboxChange\"\n    >\n      <wx-checkbox-group\n        class=\"\"\n        bind:change=\"checkedChange\"\n      >\n        <mp-checkbox\n          class=\"test-checkbox\"\n        >\n          <wx-label\n            bind:tap=\"checkedChange\"\n          >\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell  weui-check__label   ^weui-cell_checkbox  \"\n                hoverClass=\"weui-active\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    slot=\"icon\"\n                  >\n                    <wx-checkbox\n                      checked=\"{{false}}\"\n                      class=\"weui-check\"\n                      color=\"\"\n                      disabled=\"{{false}}\"\n                      value=\"0\"\n                    />\n                    <wx-view\n                      class=\"weui-icon-checked checkbox--weui-icon-checked \"\n                    />\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-view>\n                    standard is dealt for u.\n                  </wx-view>\n                </wx-view>\n              </wx-view>\n            </mp-cell>\n          </wx-label>\n        </mp-checkbox>\n        <mp-checkbox\n          class=\"test-checkbox\"\n        >\n          <wx-label\n            bind:tap=\"checkedChange\"\n          >\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell  weui-check__label weui-cell_wxss  ^weui-cell_checkbox  \"\n                hoverClass=\"weui-active\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    slot=\"icon\"\n                  >\n                    <wx-checkbox\n                      checked=\"{{false}}\"\n                      class=\"weui-check\"\n                      color=\"\"\n                      disabled=\"{{false}}\"\n                      value=\"1\"\n                    />\n                    <wx-view\n                      class=\"weui-icon-checked checkbox--weui-icon-checked \"\n                    />\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-view>\n                    standard is dealicient for u.\n                  </wx-view>\n                </wx-view>\n              </wx-view>\n            </mp-cell>\n          </wx-label>\n        </mp-checkbox>\n      </wx-checkbox-group>\n    </mp-checkbox-group>\n  </mp-cells>\n</main>\n`;\n"
  },
  {
    "path": "src/components/checkbox/__test__/checkbox.test.js",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('checkbox-group & checkbox', () => {\n    let id\n\n    beforeAll(() => {\n        id = simulate.load(path.resolve(__dirname, './index'), { less: true })\n    })\n\n    test('basic checkbox', async () => {\n        const container = simulate.render(id)\n        container.attach(document.createElement('parent-wrapper'))\n        expect(container.toJSON()).toMatchSnapshot()\n    })\n\n    test('radio value', async () => {\n        const container = simulate.render(id)\n        container.attach(document.createElement('parent-wrapper'))\n\n        const radioGroup = container.querySelector('.radio-group')\n\n        radioGroup.dispatchEvent('change', {\n            detail: {\n                value: '0'\n            }\n        })\n        await simulate.sleep(10)\n        expect(container.data.radioValue).toBe('0')\n\n        radioGroup.dispatchEvent('change', {\n            detail: {\n                value: '1'\n            }\n        })\n        await simulate.sleep(10)\n        expect(container.data.radioValue).toBe('1')\n    })\n\n    test('checkbox value', async () => {\n        const container = simulate.render(id)\n        container.attach(document.createElement('parent-wrapper'))\n\n        const checkboxGroup = container.querySelector('.checkbox-group')\n\n        checkboxGroup.dispatchEvent('change', {\n            detail: {\n                value: ['0', '1']\n            }\n        })\n        await simulate.sleep(10)\n        expect(container.data.checkboxValue).toBe('0,1')\n\n        checkboxGroup.dispatchEvent('change', {\n            detail: {\n                value: ['1']\n            }\n        })\n        await simulate.sleep(10)\n        expect(container.data.checkboxValue).toBe('1')\n    })\n})\n"
  },
  {
    "path": "src/components/checkbox/__test__/index.js",
    "content": "Component({\n    data: {\n        radioItems: [\n            { name: 'cell standard', value: '0' },\n            { name: 'cell standard', value: '1' }\n        ],\n        checkboxItems: [\n            { name: 'standard is dealt for u.', value: '0' },\n            { name: 'standard is dealicient for u.', value: '1' }\n        ],\n        radioValue: '',\n        checkboxValue: 0\n    },\n    methods: {\n        radioChange(e) {\n            this.setData({\n                radioValue: e.detail.value\n            })\n        },\n        checkboxChange(e) {\n            this.setData({\n                checkboxValue: e.detail.value.join(',')\n            })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/checkbox/__test__/index.json",
    "content": "{\n    \"component\": true,\n    \"usingComponents\": {\n        \"mp-checkbox-group\": \"../../checkbox-group/checkbox-group\",\n        \"mp-checkbox\": \"../../checkbox/checkbox\"\n    }\n}"
  },
  {
    "path": "src/components/checkbox/__test__/index.wxml",
    "content": "<mp-cells title=\"单选列表项\">\n    <mp-checkbox-group class=\"radio-group\" prop=\"radio\" multi=\"{{false}}\" bindchange=\"radioChange\">\n        <mp-checkbox class=\"test-radio\" wx:for=\"{{radioItems}}\" wx:key=\"value\" label=\"{{item.name}}\" value=\"{{item.value}}\" checked=\"{{item.checked}}\"></mp-checkbox>\n    </mp-checkbox-group>\n</mp-cells>\n<mp-cells title=\"复选列表项\">\n    <mp-checkbox-group class=\"checkbox-group\" prop=\"checkbox\" multi=\"{{true}}\" bindchange=\"checkboxChange\">\n        <mp-checkbox class=\"test-checkbox\" wx:for=\"{{checkboxItems}}\" wx:key=\"value\" label=\"{{item.name}}\" value=\"{{item.value}}\" checked=\"{{item.checked}}\"></mp-checkbox>\n    </mp-checkbox-group>\n</mp-cells>"
  },
  {
    "path": "src/components/checkbox/checkbox.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {\n        \"mp-cell\": \"../cell/cell\",\n        \"mp-checkbox-group\": \"../checkbox-group/checkbox-group\"\n    }\n}\n"
  },
  {
    "path": "src/components/checkbox/checkbox.less",
    "content": "@import (reference) '~weui-wxss/src/style/widget/weui-cell/weui-check/weui-radio.less';\n@import (reference) '~weui-wxss/src/style/widget/weui-cell/weui-check/weui-checkbox.less';\n\n.weui-cell_wxss.weui-cell_wxss::before{\n  display: flex;\n}\n\n.weui-cell_radio .weui-check+.weui-icon-checked {\n  color: transparent;\n}\n\n.weui-cell_radio .weui-check + .weui-icon-checked {\n  &.weui-icon-is-checked {\n    /* skyline 不支持 attribute selector */\n    &:extend(.weui-cells_radio .weui-check:checked + .weui-icon-checked);\n    background-color: @weuiColorPrimary;\n  }\n  background-color: transparent;\n}\n\n.weui-cell_checkbox .weui-check + .weui-icon-checked {\n  &.weui-icon-is-checked {\n    /* skyline 不支持 attribute selector */\n    &:extend(.weui-cells_checkbox .weui-check:checked + .weui-icon-checked);\n  }\n  &:extend(.weui-cells_checkbox .weui-icon-checked);\n}"
  },
  {
    "path": "src/components/checkbox/checkbox.ts",
    "content": "Component({\n    options: {\n        multipleSlots: true\n    },\n    properties: {\n        multi: {\n            type: Boolean,\n            value: true\n        },\n        checked: {\n            type: Boolean,\n            value: false\n        },\n        value: {\n            type: String,\n            value: ''\n        },\n        label: {\n            type: String,\n            value: 'label'\n        },\n        extClass: {\n            type: String,\n            value: ''\n        },\n        disabled: {\n            type: Boolean,\n            value: false\n        }\n    },\n    data: {},\n    relations: {\n        '../checkbox-group/checkbox-group': {\n            type: 'ancestor',\n            linked(target) {\n                this.data.group = target\n            },\n            unlinked() {\n                this.data.group = null\n            }\n        }\n    },\n    methods: {\n        setMulti(multi) {\n            this.setData({\n                multi\n            })\n        },\n        setOuterClass(className) {\n            this.setData({\n                outerClass: className\n            })\n        },\n        checkedChange() {\n            if (this.data.disabled) return\n            if (this.data.multi) {\n                const checked = !this.data.checked\n                this.setData({\n                    checked\n                })\n                if (this.data.group) {\n                    this.data.group.checkedChange(checked, this)\n                }\n            } else {\n                const checked = this.data.checked\n                if (checked) return\n                this.setData({\n                    checked: true\n                })\n                if (this.data.group) {\n                    this.data.group.checkedChange(checked, this)\n                }\n            }\n            this.triggerEvent('change', { value: this.data.value, checked: this.data.checked })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/checkbox/checkbox.wxml",
    "content": "<label bindtap=\"checkedChange\">\n  <mp-cell\n    has-footer=\"{{!multi}}\"\n    has-header=\"{{multi}}\"\n    ext-class=\"weui-check__label {{outerClass}} {{extClass}} {{!multi ? 'weui-cell_radio' : 'weui-cell_checkbox'}}\"\n    ext-hover-class=\"weui-active\">\n\n    <view slot=\"icon\" wx:if=\"{{multi}}\">\n      <checkbox value=\"{{value}}\" checked=\"{{checked}}\" disabled=\"{{disabled}}\" color=\"{{color}}\" class=\"weui-check\">\n      </checkbox>\n      <view class=\"weui-icon-checked checkbox--weui-icon-checked {{checked ? 'weui-icon-is-checked' : ''}}\"></view>\n    </view>\n    <view>{{label}}</view>\n    <view slot=\"footer\" wx:if=\"{{!multi}}\">\n      <radio value=\"{{value}}\" checked=\"{{checked}}\" disabled=\"{{disabled}}\" color=\"{{color}}\" class=\"weui-check\"></radio>\n      <view class=\"weui-icon-checked checkbox--weui-icon-checked {{checked ? 'weui-icon-is-checked' : ''}}\"></view>\n    </view>\n  </mp-cell>\n</label>"
  },
  {
    "path": "src/components/checkbox-group/checkbox-group.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {\n        \"mp-cells\": \"../cells/cells\"\n    }\n}"
  },
  {
    "path": "src/components/checkbox-group/checkbox-group.less",
    "content": ""
  },
  {
    "path": "src/components/checkbox-group/checkbox-group.ts",
    "content": "// import cells from \"../cells/cells\"\n\nComponent({\n    options: {\n        multipleSlots: true\n    },\n    properties: {\n        multi: {\n            type: Boolean,\n            value: true,\n            observer: '_multiChange'\n        },\n        extClass: {\n            type: String,\n            value: ''\n        },\n        prop: {\n            type: String,\n            value: ''\n        }\n    },\n    data: {\n        targetList: [],\n        parentCell: null\n    },\n    relations: {\n        '../checkbox/checkbox': {\n            type: 'descendant',\n            linked(target) {\n                this.data.targetList.push(target)\n                target.setMulti(this.data.multi)\n\n                if (!this.data.firstItem) {\n                    this.data.firstItem = target\n                }\n                if (target !== this.data.firstItem) {\n                    target.setOuterClass('weui-cell_wxss')\n                }\n            },\n            unlinked(target) {\n                let index = -1\n                this.data.targetList.forEach((item, idx) => {\n                    if (item === target) {\n                        index = idx\n                    }\n                })\n                this.data.targetList.splice(index, 1)\n                if (!this.data.targetList) {\n                    this.data.firstItem = null\n                }\n            }\n        },\n        '../form/form': {\n            type: 'ancestor'\n        },\n        '../cells/cells': {\n            type: 'ancestor',\n            // target: cells,\n            linked(target) {\n                if (!this.data.parentCell) {\n                    this.data.parentCell = target\n                }\n                this.setParentCellsClass()\n            },\n            unlinked() {\n                this.data.parentCell = null // 方便内存回收\n            }\n        }\n    },\n    methods: {\n        checkedChange(checked, target) {\n            if (this.data.multi) {\n                const vals = []\n                this.data.targetList.forEach((item) => {\n                    if (item.data.disabled) return\n                    if (item.data.checked) {\n                        vals.push(item.data.value)\n                    }\n                })\n                this.triggerEvent('change', { value: vals })\n            } else {\n                let val = ''\n                this.data.targetList.forEach((item) => {\n                    if (item.data.disabled) return\n                    if (item === target) {\n                        val = item.data.value\n                    } else {\n                        item.setData({\n                            checked: false\n                        })\n                    }\n                })\n                this.triggerEvent('change', { value: val }, {})\n            }\n        },\n        setParentCellsClass() {\n            const className = this.data.multi ? 'weui-cells_checkbox' : 'weui-cells_radio'\n            if (this.data.parentCell) {\n                this.data.parentCell.setCellsClass(className)\n            }\n        },\n        _multiChange(multi) {\n            this.data.targetList.forEach((target) => {\n                target.setMulti(multi)\n            })\n            if (this.data.parentCell) {\n                this.data.parentCell.setCellMulti(multi)\n            }\n            return multi\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/checkbox-group/checkbox-group.wxml",
    "content": "<checkbox-group wx:if=\"{{multi}}\" class=\"{{extClass}}\" bindchange=\"checkedChange\">\n    <slot></slot>\n</checkbox-group>\n<radio-group wx:else class=\"{{extClass}}\" bindchange=\"checkedChange\">\n    <slot></slot>\n</radio-group>"
  },
  {
    "path": "src/components/dialog/__test__/__snapshots__/dialog.test.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`dialog basic dialog 1`] = `\n<main>\n  <wx-root-portal\n    enable=\"{{true}}\"\n  >\n    <wx-view\n      ariaModal=\"true\"\n      ariaRole=\"dialog\"\n      class=\"root-portal-box weui-dialog__root weui-animate-fade-in\"\n      style=\"z-index:901\"\n    >\n      <wx-view\n        class=\"weui-dialog\"\n        catch:tap=\"stopEvent\"\n      >\n        <wx-view\n          class=\"weui-dialog__hd\"\n        >\n          <wx-view\n            class=\"weui-dialog__title\"\n            tabindex=\"0\"\n          >\n            dialog title\n            \n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"weui-dialog__bd\"\n        />\n        <wx-view\n          class=\"weui-dialog__ft\"\n        >\n          <wx-view\n            ariaRole=\"button\"\n            class=\"weui-dialog__btn weui-dialog__btn_default \"\n            data-index=\"{{0}}\"\n            hoverClass=\"weui-active\"\n            bind:tap=\"buttonTap\"\n          >\n            取消\n          </wx-view>\n          <wx-view\n            ariaRole=\"button\"\n            class=\"weui-dialog__btn weui-dialog__btn_primary \"\n            data-index=\"{{1}}\"\n            hoverClass=\"weui-active\"\n            bind:tap=\"buttonTap\"\n          >\n            确定\n          </wx-view>\n        </wx-view>\n      </wx-view>\n    </wx-view>\n    <wx-view\n      ariaLabel=\"关闭\"\n      ariaRole=\"button\"\n      class=\"weui-mask\"\n      style=\"z-index:900\"\n      bind:tap=\"close\"\n    />\n  </wx-root-portal>\n</main>\n`;\n\nexports[`dialog close 1`] = `\n<main>\n  <wx-root-portal\n    enable=\"{{true}}\"\n  >\n    <wx-view\n      ariaModal=\"true\"\n      ariaRole=\"dialog\"\n      class=\"root-portal-box weui-dialog__root weui-animate-fade-out\"\n      style=\"z-index:901\"\n    >\n      <wx-view\n        class=\"weui-dialog\"\n        catch:tap=\"stopEvent\"\n      >\n        <wx-view\n          class=\"weui-dialog__hd\"\n        >\n          <wx-view\n            class=\"weui-dialog__title\"\n            tabindex=\"0\"\n          >\n            dialog title\n            \n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"weui-dialog__bd\"\n        />\n        <wx-view\n          class=\"weui-dialog__ft\"\n        >\n          <wx-view\n            ariaRole=\"button\"\n            class=\"weui-dialog__btn  \"\n            data-index=\"{{0}}\"\n            hoverClass=\"weui-active\"\n            bind:tap=\"buttonTap\"\n          >\n            取消\n          </wx-view>\n          <wx-view\n            ariaRole=\"button\"\n            class=\"weui-dialog__btn  \"\n            data-index=\"{{1}}\"\n            hoverClass=\"weui-active\"\n            bind:tap=\"buttonTap\"\n          >\n            确定\n          </wx-view>\n        </wx-view>\n      </wx-view>\n    </wx-view>\n    <wx-view\n      ariaLabel=\"关闭\"\n      ariaRole=\"button\"\n      class=\"weui-mask\"\n      style=\"z-index:900\"\n      bind:tap=\"close\"\n    />\n  </wx-root-portal>\n</main>\n`;\n"
  },
  {
    "path": "src/components/dialog/__test__/dialog.test.js",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('dialog', () => {\n    let id\n\n    beforeAll(() => {\n        id = simulate.load(path.resolve(__dirname, './index'), { less: true })\n    })\n\n    test('basic dialog', async () => {\n        const container = simulate.render(id)\n        container.attach(document.createElement('parent-wrapper'))\n        expect(container.toJSON()).toMatchSnapshot()\n    })\n\n    test('buttons', async () => {\n        const container = simulate.render(id)\n        container.attach(document.createElement('parent-wrapper'))\n\n        const [cancelBtn, confirmBtn] = container.querySelectorAll('.dialog >>> .weui-dialog__btn')\n\n        cancelBtn.dispatchEvent('tap')\n        await simulate.sleep(10)\n        expect(container.data.buttonValue).toBe('取消')\n\n        confirmBtn.dispatchEvent('tap')\n        await simulate.sleep(10)\n        expect(container.data.buttonValue).toBe('确定')\n    })\n\n    test('close', async () => {\n        const container = simulate.render(id)\n        container.attach(document.createElement('parent-wrapper'))\n\n        container.querySelector('.dialog >>> .weui-mask').dispatchEvent('tap')\n        await simulate.sleep(10)\n        expect(container.data.closed).toBe(true)\n        expect(container.toJSON()).toMatchSnapshot()\n    })\n})\n"
  },
  {
    "path": "src/components/dialog/__test__/index.js",
    "content": "Component({\n    data: {\n        buttonValue: '',\n        closed: false,\n        buttons: [{ text: '取消' }, { text: '确定' }]\n    },\n    methods: {\n        buttontap(e) {\n            this.setData({\n                buttonValue: e.detail.item.text\n            })\n        },\n        close(e) {\n            this.setData({\n                closed: true\n            })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/dialog/__test__/index.json",
    "content": "{\n    \"component\": true,\n    \"usingComponents\": {\n        \"mp-dialog\": \"..//dialog\"\n    }\n}"
  },
  {
    "path": "src/components/dialog/__test__/index.wxml",
    "content": "<mp-dialog\n    class=\"dialog\"\n    title=\"dialog title\"\n    show=\"{{!closed}}\"\n    buttons=\"{{buttons}}\"\n    bindbuttontap=\"buttontap\"\n    bindclose=\"close\"\n>\n</mp-dialog>"
  },
  {
    "path": "src/components/dialog/dialog.json",
    "content": "{\n  \"component\": true,\n  \"styleIsolation\": \"apply-shared\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/dialog/dialog.less",
    "content": ".weui-dialog__root {\n  position: relative;\n  z-index: 1000;\n}\n\n.weui-dialog__title:focus {\n  outline: none;\n}\n\n\n\n// FIXME: skyline animation 暂有 scope 的 bug\n.weui-animate-fade-in {\n  animation: weuiFadeIn ease 0.3s forwards;\n}\n\n@keyframes weuiFadeIn {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n.weui-animate-fade-out {\n  animation: weuiFadeOut ease 0.3s forwards;\n}\n\n@keyframes weuiFadeOut {\n  from {\n    opacity: 1;\n  }\n  to {\n    opacity: 0;\n  }\n}"
  },
  {
    "path": "src/components/dialog/dialog.ts",
    "content": "Component({\n    options: {\n        virtualHost: true,\n        multipleSlots: true // 在组件定义时的选项中启用多slot支持\n    },\n    properties: {\n        title: {\n            // 弹窗标题，也可以通过 slot 自定义\n            type: String,\n            value: ''\n        },\n        extClass: {\n            // 弹窗 class\n            type: String,\n            value: ''\n        },\n        maskClosable: {\n            type: Boolean,\n            value: true\n        },\n        mask: {\n            // 是否需要 遮罩层\n            type: Boolean,\n            value: true\n        },\n        show: {\n            // 是否开启弹窗\n            type: Boolean,\n            value: false,\n            observer: '_showChange'\n        },\n        buttons: {\n            type: Array,\n            value: [] // {text, extClass}\n        },\n        rootPortal: {\n            // 是否使用 root-portal\n            type: Boolean,\n            value: false\n        }\n    },\n    data: {\n        wrapperShow: false,\n        innerShow: false\n    },\n    ready() {\n        const buttons = this.data.buttons\n        const len = buttons.length\n        buttons.forEach((btn, index) => {\n            if (len === 1) {\n                btn.className = 'weui-dialog__btn_primary'\n            } else if (index === 0) {\n                btn.className = 'weui-dialog__btn_default'\n            } else {\n                btn.className = 'weui-dialog__btn_primary'\n            }\n        })\n        this.setData({\n            buttons\n        })\n        this._showChange(this.data.show)\n    },\n    methods: {\n        _showChange(show) {\n            if (show) {\n                this.setData({\n                    wrapperShow: true,\n                    innerShow: true\n                })\n            } else {\n                this.setData({ innerShow: false })\n                setTimeout(() => {\n                    this.setData({ wrapperShow: false })\n                }, 300)\n            }\n        },\n        buttonTap(e) {\n            const { index } = e.currentTarget.dataset\n            this.triggerEvent('buttontap', { index, item: this.data.buttons[index] }, {})\n        },\n        close() {\n            const data: any = this.data\n            if (!data.maskClosable) return\n            this.setData({\n                show: false\n            })\n            this.triggerEvent('close', {}, {})\n        },\n        stopEvent() {}\n    }\n})\n"
  },
  {
    "path": "src/components/dialog/dialog.wxml",
    "content": "<template name=\"body\">\n  <view class=\"weui-dialog {{extClass}} {{innerShow ? 'weui-animate-fade-in' : 'weui-animate-fade-out'}}\" catchtap=\"stopEvent\">\n    <view class=\"weui-dialog__hd\">\n      <view class=\"weui-dialog__title\" tabindex=\"0\">{{title}}\n        <slot name=\"title\"></slot>\n      </view>\n    </view>\n    <view class=\"weui-dialog__bd\">\n      <slot></slot>\n    </view>\n    <view class=\"weui-dialog__ft\">\n      <block wx:if=\"{{buttons && buttons.length}}\">\n        <view\n          wx:for=\"{{buttons}}\"\n          wx:key=\"index\"\n          class=\"weui-dialog__btn {{item.className}} {{item.extClass}}\"\n          hover-class=\"weui-active\"\n          data-index=\"{{index}}\"\n          bindtap=\"buttonTap\"\n          aria-role=\"button\"\n        >{{item.text}}</view>\n      </block>\n      <slot name=\"footer\" wx:else></slot>\n    </view>\n  </view>\n  <view\n    wx:if=\"{{mask}}\"\n    bindtap=\"close\"\n    class=\"weui-mask {{maskClass}} {{innerShow ? 'weui-animate-fade-in' : 'weui-animate-fade-out'}}\"\n    aria-role=\"button\"\n    aria-label=\"关闭\"\n  ></view>\n</template>\n\n<root-portal enable=\"{{true}}\" wx:if=\"{{rootPortal && wrapperShow}}\">\n  <view\n    aria-role=\"dialog\"\n    aria-modal=\"true\"\n    class=\"root-portal-box weui-dialog__root\"\n  >\n    <template is=\"body\" data=\"{{title, maskClosable, maskClass, extClass, mask, buttons, innerShow}}\" />\n  </view>\n</root-portal>\n<view\n  wx:elif=\"{{!rootPortal && wrapperShow}}\"\n  aria-role=\"dialog\"\n  aria-modal=\"true\"\n>\n  <template is=\"body\" data=\"{{title, maskClosable, maskClass, extClass, mask, buttons, innerShow}}\" />\n</view>\n"
  },
  {
    "path": "src/components/form/__test__/__snapshots__/form.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`form basic 1`] = `\n<main>\n  <mp-form\n    id=\"form\"\n  >\n    <wx-view\n      class=\"\"\n    >\n      <mp-cells>\n        <wx-view\n          ariaRole=\"\"\n          class=\" weui-cells__group  weui-cells_radio\"\n        >\n          <wx-view\n            class=\"weui-cells__title\"\n          >\n            单选列表项\n          </wx-view>\n          <wx-view\n            class=\"weui-cells weui-cells_after-title \"\n          >\n            <mp-checkbox-group\n              bind:change=\"radioChange\"\n            >\n              <wx-radio-group\n                class=\"\"\n                bind:change=\"checkedChange\"\n              >\n                <mp-checkbox>\n                  <wx-label\n                    bind:tap=\"checkedChange\"\n                  >\n                    <mp-cell>\n                      <wx-view\n                        ariaRole=\"\"\n                        class=\"weui-cell  weui-check__label   ^weui-cell_radio  \"\n                        hoverClass=\"weui-active\"\n                        bind:tap=\"navigateTo\"\n                      >\n                        <wx-view\n                          class=\"weui-cell__bd\"\n                        >\n                          <wx-view>\n                            cell standard\n                          </wx-view>\n                        </wx-view>\n                        <wx-view\n                          class=\"weui-cell__ft weui-cell__ft_in-access \"\n                        >\n                          <wx-view\n                            slot=\"footer\"\n                          >\n                            <wx-radio\n                              checked=\"{{true}}\"\n                              class=\"weui-check\"\n                              color=\"\"\n                              disabled=\"{{false}}\"\n                              value=\"0\"\n                            />\n                            <wx-view\n                              class=\"weui-icon-checked checkbox--weui-icon-checked weui-icon-is-checked\"\n                            />\n                          </wx-view>\n                        </wx-view>\n                      </wx-view>\n                    </mp-cell>\n                  </wx-label>\n                </mp-checkbox>\n                <mp-checkbox>\n                  <wx-label\n                    bind:tap=\"checkedChange\"\n                  >\n                    <mp-cell>\n                      <wx-view\n                        ariaRole=\"\"\n                        class=\"weui-cell  weui-check__label weui-cell_wxss  ^weui-cell_radio  \"\n                        hoverClass=\"weui-active\"\n                        bind:tap=\"navigateTo\"\n                      >\n                        <wx-view\n                          class=\"weui-cell__bd\"\n                        >\n                          <wx-view>\n                            cell standard\n                          </wx-view>\n                        </wx-view>\n                        <wx-view\n                          class=\"weui-cell__ft weui-cell__ft_in-access \"\n                        >\n                          <wx-view\n                            slot=\"footer\"\n                          >\n                            <wx-radio\n                              checked=\"{{false}}\"\n                              class=\"weui-check\"\n                              color=\"\"\n                              disabled=\"{{false}}\"\n                              value=\"1\"\n                            />\n                            <wx-view\n                              class=\"weui-icon-checked checkbox--weui-icon-checked \"\n                            />\n                          </wx-view>\n                        </wx-view>\n                      </wx-view>\n                    </mp-cell>\n                  </wx-label>\n                </mp-checkbox>\n              </wx-radio-group>\n            </mp-checkbox-group>\n          </wx-view>\n        </wx-view>\n      </mp-cells>\n      <mp-cells>\n        <wx-view\n          ariaRole=\"\"\n          class=\" weui-cells__group  weui-cells_checkbox\"\n        >\n          <wx-view\n            class=\"weui-cells__title\"\n          >\n            复选列表项\n          </wx-view>\n          <wx-view\n            class=\"weui-cells weui-cells_after-title weui-cells_checkbox\"\n          >\n            <mp-checkbox-group\n              bind:change=\"checkboxChange\"\n            >\n              <wx-checkbox-group\n                class=\"\"\n                bind:change=\"checkedChange\"\n              >\n                <mp-checkbox>\n                  <wx-label\n                    bind:tap=\"checkedChange\"\n                  >\n                    <mp-cell>\n                      <wx-view\n                        ariaRole=\"\"\n                        class=\"weui-cell  weui-check__label   ^weui-cell_checkbox  \"\n                        hoverClass=\"weui-active\"\n                        bind:tap=\"navigateTo\"\n                      >\n                        <wx-view\n                          class=\"weui-cell__hd \"\n                        >\n                          <wx-view\n                            slot=\"icon\"\n                          >\n                            <wx-checkbox\n                              checked=\"{{true}}\"\n                              class=\"weui-check\"\n                              color=\"\"\n                              disabled=\"{{false}}\"\n                              value=\"0\"\n                            />\n                            <wx-view\n                              class=\"weui-icon-checked checkbox--weui-icon-checked weui-icon-multi-is-checked\"\n                            />\n                          </wx-view>\n                        </wx-view>\n                        <wx-view\n                          class=\"weui-cell__bd\"\n                        >\n                          <wx-view>\n                            standard is dealt for u.\n                          </wx-view>\n                        </wx-view>\n                      </wx-view>\n                    </mp-cell>\n                  </wx-label>\n                </mp-checkbox>\n                <mp-checkbox>\n                  <wx-label\n                    bind:tap=\"checkedChange\"\n                  >\n                    <mp-cell>\n                      <wx-view\n                        ariaRole=\"\"\n                        class=\"weui-cell  weui-check__label weui-cell_wxss  ^weui-cell_checkbox  \"\n                        hoverClass=\"weui-active\"\n                        bind:tap=\"navigateTo\"\n                      >\n                        <wx-view\n                          class=\"weui-cell__hd \"\n                        >\n                          <wx-view\n                            slot=\"icon\"\n                          >\n                            <wx-checkbox\n                              checked=\"{{false}}\"\n                              class=\"weui-check\"\n                              color=\"\"\n                              disabled=\"{{false}}\"\n                              value=\"1\"\n                            />\n                            <wx-view\n                              class=\"weui-icon-checked checkbox--weui-icon-checked \"\n                            />\n                          </wx-view>\n                        </wx-view>\n                        <wx-view\n                          class=\"weui-cell__bd\"\n                        >\n                          <wx-view>\n                            standard is dealicient for u.\n                          </wx-view>\n                        </wx-view>\n                      </wx-view>\n                    </mp-cell>\n                  </wx-label>\n                </mp-checkbox>\n              </wx-checkbox-group>\n            </mp-checkbox-group>\n          </wx-view>\n        </wx-view>\n      </mp-cells>\n      <mp-cells>\n        <wx-view\n          ariaRole=\"\"\n          class=\" weui-cells__group  \"\n        >\n          <wx-view\n            class=\"weui-cells__title\"\n          >\n            表单\n          </wx-view>\n          <wx-view\n            class=\"weui-cells weui-cells_after-title \"\n          >\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell     weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    class=\"weui-label\"\n                  >\n                    姓名\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-input\n                    class=\"weui-input\"\n                    data-field=\"name\"\n                    placeholder=\"请输入姓名\"\n                    bind:input=\"formInputChange\"\n                  />\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                />\n              </wx-view>\n            </mp-cell>\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell   weui-cell_wxss  weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    class=\"weui-label\"\n                  >\n                    qq\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-input\n                    class=\"weui-input\"\n                    data-field=\"qq\"\n                    placeholder=\"请输入qq\"\n                    bind:input=\"formInputChange\"\n                  />\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                />\n              </wx-view>\n            </mp-cell>\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell   weui-cell_vcode weui-cell_wxss  weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    class=\"weui-label\"\n                  >\n                    手机号\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-input\n                    class=\"weui-input\"\n                    data-field=\"mobile\"\n                    placeholder=\"请输入手机号\"\n                    bind:input=\"formInputChange\"\n                  />\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                >\n                  <wx-button\n                    class=\"weui-vcode-btn\"\n                    slot=\"footer\"\n                    type=\"default\"\n                  >\n                    获取验证码\n                  </wx-button>\n                </wx-view>\n              </wx-view>\n            </mp-cell>\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell   weui-cell_wxss  weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    class=\"weui-label\"\n                  >\n                    日期\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-picker\n                    data-field=\"date\"\n                    end=\"2017-09-01\"\n                    mode=\"date\"\n                    start=\"2015-09-01\"\n                    value=\"2016-09-01\"\n                    bind:change=\"bindDateChange\"\n                  >\n                    <wx-view\n                      class=\"weui-input\"\n                    >\n                      2016-09-01\n                    </wx-view>\n                  </wx-picker>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                />\n              </wx-view>\n            </mp-cell>\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell   weui-cell_vcode weui-cell_wxss  weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    class=\"weui-label\"\n                  >\n                    验证码\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-input\n                    class=\"weui-input\"\n                    data-field=\"vcode\"\n                    placeholder=\"请输入验证码\"\n                    bind:input=\"formInputChange\"\n                  />\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                >\n                  <wx-image\n                    class=\"weui-vcode-img\"\n                    slot=\"footer\"\n                    src=\"../images/vcode.jpg\"\n                    style=\"width: 108px\"\n                  />\n                </wx-view>\n              </wx-view>\n            </mp-cell>\n          </wx-view>\n          <wx-view\n            class=\"weui-cells__tips\"\n          >\n            底部说明文字底部说明文字\n          </wx-view>\n        </wx-view>\n      </mp-cells>\n      <mp-cells>\n        <wx-view\n          ariaRole=\"\"\n          class=\" weui-cells__group  \"\n        >\n          <wx-view\n            class=\"weui-cells__title\"\n          >\n            提交后表单项报错\n          </wx-view>\n          <wx-view\n            class=\"weui-cells weui-cells_after-title \"\n          >\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell     weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    class=\"weui-label\"\n                  >\n                    卡号\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-input\n                    class=\"weui-input\"\n                    data-field=\"idcard\"\n                    placeholder=\"请输入卡号\"\n                    bind:input=\"formInputChange\"\n                  />\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                />\n              </wx-view>\n            </mp-cell>\n          </wx-view>\n        </wx-view>\n      </mp-cells>\n      <mp-cells>\n        <wx-view\n          ariaRole=\"\"\n          class=\" weui-cells__group  \"\n        >\n          <wx-view\n            class=\"weui-cells__title\"\n          >\n            开关\n          </wx-view>\n          <wx-view\n            class=\"weui-cells weui-cells_after-title \"\n          >\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell     weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    class=\"weui-label\"\n                  >\n                    标题文字\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                />\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                >\n                  <wx-switch\n                    checked=\"{{true}}\"\n                    slot=\"footer\"\n                  />\n                </wx-view>\n              </wx-view>\n            </mp-cell>\n          </wx-view>\n        </wx-view>\n      </mp-cells>\n      <mp-cells>\n        <wx-view\n          ariaRole=\"\"\n          class=\" weui-cells__group  \"\n        >\n          <wx-view\n            class=\"weui-cells__title\"\n          >\n            文本框\n          </wx-view>\n          <wx-view\n            class=\"weui-cells weui-cells_after-title \"\n          >\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell     weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    class=\"weui-label\"\n                  >\n                    标题文字\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-input\n                    class=\"weui-input\"\n                    placeholder=\"请输入文本\"\n                  />\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                />\n              </wx-view>\n            </mp-cell>\n          </wx-view>\n        </wx-view>\n      </mp-cells>\n      <mp-cells>\n        <wx-view\n          ariaRole=\"\"\n          class=\" weui-cells__group  \"\n        >\n          <wx-view\n            class=\"weui-cells__title\"\n          >\n            文本域\n          </wx-view>\n          <wx-view\n            class=\"weui-cells weui-cells_after-title \"\n          >\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell     weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-textarea\n                    class=\"weui-textarea\"\n                    placeholder=\"请输入文本\"\n                    style=\"height: 3.3em\"\n                  />\n                  <wx-view\n                    class=\"weui-textarea-counter\"\n                  >\n                    0/200\n                  </wx-view>\n                </wx-view>\n              </wx-view>\n            </mp-cell>\n          </wx-view>\n        </wx-view>\n      </mp-cells>\n      <mp-cells>\n        <wx-view\n          ariaRole=\"\"\n          class=\" weui-cells__group  \"\n        >\n          <wx-view\n            class=\"weui-cells__title\"\n          >\n            选择\n          </wx-view>\n          <wx-view\n            class=\"weui-cells weui-cells_after-title \"\n          >\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell  weui-cell_select weui-cell_select-before   weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    slot=\"title\"\n                    style=\"width: 105px\"\n                  >\n                    <wx-picker\n                      range=\"{{\n                        Array [\n                          \"+86\",\n                          \"+80\",\n                          \"+84\",\n                          \"+87\",\n                        ]\n                      }}\"\n                      value=\"{{0}}\"\n                      bind:change=\"bindCountryCodeChange\"\n                    >\n                      <wx-view\n                        class=\"weui-select\"\n                      >\n                        +86\n                      </wx-view>\n                    </wx-picker>\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-input\n                    class=\"weui-input\"\n                    placeholder=\"请输入号码\"\n                  />\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                />\n              </wx-view>\n            </mp-cell>\n          </wx-view>\n        </wx-view>\n      </mp-cells>\n      <mp-cells>\n        <wx-view\n          ariaRole=\"\"\n          class=\" weui-cells__group  \"\n        >\n          <wx-view\n            class=\"weui-cells__title\"\n          >\n            选择\n          </wx-view>\n          <wx-view\n            class=\"weui-cells weui-cells_after-title \"\n          >\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell  weui-cell_select   weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-picker\n                    range=\"{{\n                      Array [\n                        \"微信号\",\n                        \"QQ\",\n                        \"Email\",\n                      ]\n                    }}\"\n                    value=\"{{0}}\"\n                    bind:change=\"bindAccountChange\"\n                  >\n                    <wx-view\n                      class=\"weui-select\"\n                    >\n                      微信号\n                    </wx-view>\n                  </wx-picker>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                />\n              </wx-view>\n            </mp-cell>\n            <mp-cell>\n              <wx-view\n                ariaRole=\"\"\n                class=\"weui-cell  weui-cell_select weui-cell_select-after weui-cell_wxss  weui-cell-inform\"\n                hoverClass=\"\"\n                bind:tap=\"navigateTo\"\n              >\n                <wx-view\n                  class=\"weui-cell__hd \"\n                >\n                  <wx-view\n                    class=\"weui-label\"\n                    slot=\"title\"\n                  >\n                    国家/地区\n                  </wx-view>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__bd\"\n                >\n                  <wx-picker\n                    range=\"{{\n                      Array [\n                        \"中国\",\n                        \"美国\",\n                        \"英国\",\n                      ]\n                    }}\"\n                    value=\"{{0}}\"\n                    bind:change=\"bindCountryChange\"\n                  >\n                    <wx-view\n                      class=\"weui-select\"\n                    >\n                      中国\n                    </wx-view>\n                  </wx-picker>\n                </wx-view>\n                <wx-view\n                  class=\"weui-cell__ft weui-cell__ft_in-access \"\n                />\n              </wx-view>\n            </mp-cell>\n          </wx-view>\n        </wx-view>\n      </mp-cells>\n      <wx-button\n        class=\"submit\"\n        bind:tap=\"submitForm\"\n      >\n        提交\n      </wx-button>\n    </wx-view>\n  </mp-form>\n</main>\n`;\n"
  },
  {
    "path": "src/components/form/__test__/comp/index.json",
    "content": "{\n    \"component\": true,\n    \"usingComponents\": {\n        \"mp-cells\": \"../../../cells/cells\",\n        \"mp-cell\": \"../../../cell/cell\",\n        \"mp-checkbox\": \"../../../checkbox/checkbox\",\n        \"mp-checkbox-group\": \"../../../checkbox-group/checkbox-group\",\n        \"mp-form\": \"../../../form/form\"\n    }\n}\n"
  },
  {
    "path": "src/components/form/__test__/comp/index.ts",
    "content": "Component({\n    data: {\n        radioItems: [\n            { name: 'cell standard', value: '0', checked: true },\n            { name: 'cell standard', value: '1' }\n        ],\n        checkboxItems: [\n            { name: 'standard is dealt for u.', value: '0', checked: true },\n            { name: 'standard is dealicient for u.', value: '1' }\n        ],\n        items: [\n            { name: 'USA', value: '美国' },\n            { name: 'CHN', value: '中国', checked: 'true' },\n            { name: 'BRA', value: '巴西' },\n            { name: 'JPN', value: '日本' },\n            { name: 'ENG', value: '英国' },\n            { name: 'TUR', value: '法国' }\n        ],\n\n        date: '2016-09-01',\n        time: '12:01',\n\n        countryCodes: ['+86', '+80', '+84', '+87'],\n        countryCodeIndex: 0,\n\n        countries: ['中国', '美国', '英国'],\n        countryIndex: 0,\n\n        accounts: ['微信号', 'QQ', 'Email'],\n        accountIndex: 0,\n\n        formData: {},\n        rules: [\n            {\n                name: 'radio',\n                rules: { required: false, message: '单选列表是必选项' }\n            },\n            {\n                name: 'checkbox',\n                rules: { required: true, message: '多选列表是必选项' }\n            },\n            {\n                name: 'name',\n                rules: { required: true, message: '请输入姓名' }\n            },\n            {\n                name: 'qq',\n                rules: { required: true, message: 'qq必填' }\n            },\n            {\n                name: 'mobile',\n                rules: [\n                    { required: true, message: 'mobile必填' },\n                    { mobile: true, message: 'mobile格式不对' }\n                ]\n            },\n            {\n                name: 'vcode',\n                rules: { required: true, message: '验证码必填' }\n            },\n            {\n                name: 'idcard',\n                rules: {\n                    validator: function (rule, value, param, modeels) {\n                        if (!value || value.length !== 18) {\n                            return 'idcard格式不正确'\n                        }\n                    }\n                }\n            }\n        ]\n    },\n    methods: {\n        radioChange: function (e) {\n            // console.log('radio发生change事件，携带value值为：', e.detail.value)\n\n            const radioItems = this.data.radioItems\n            for (let i = 0, len = radioItems.length; i < len; ++i) {\n                radioItems[i].checked = radioItems[i].value == e.detail.value\n            }\n\n            this.setData({\n                radioItems: radioItems,\n                [`formData.radio`]: e.detail.value\n            })\n        },\n        checkboxChange: function (e) {\n            // console.log('checkbox发生change事件，携带value值为：', e.detail.value)\n\n            const checkboxItems = this.data.checkboxItems,\n                values = e.detail.value\n            for (let i = 0, lenI = checkboxItems.length; i < lenI; ++i) {\n                checkboxItems[i].checked = false\n\n                for (let j = 0, lenJ = values.length; j < lenJ; ++j) {\n                    if (checkboxItems[i].value == values[j]) {\n                        checkboxItems[i].checked = true\n                        break\n                    }\n                }\n            }\n\n            this.setData({\n                checkboxItems: checkboxItems,\n                [`formData.checkbox`]: e.detail.value\n            })\n        },\n        bindDateChange: function (e) {\n            this.setData({\n                date: e.detail.value,\n                [`formData.date`]: e.detail.value\n            })\n        },\n        formInputChange(e) {\n            const { field } = e.currentTarget.dataset\n            this.setData({\n                [`formData.${field}`]: e.detail.value\n            })\n        },\n        bindTimeChange: function (e) {\n            this.setData({\n                time: e.detail.value\n            })\n        },\n        bindCountryCodeChange: function (e) {\n            // console.log('picker country code 发生选择改变，携带值为', e.detail.value)\n\n            this.setData({\n                countryCodeIndex: e.detail.value\n            })\n        },\n        bindCountryChange: function (e) {\n            // console.log('picker country 发生选择改变，携带值为', e.detail.value)\n\n            this.setData({\n                countryIndex: e.detail.value\n            })\n        },\n        bindAccountChange: function (e) {\n            // console.log('picker account 发生选择改变，携带值为', e.detail.value)\n\n            this.setData({\n                accountIndex: e.detail.value\n            })\n        },\n        bindAgreeChange: function (e) {\n            this.setData({\n                isAgree: !!e.detail.value.length\n            })\n        },\n        submitForm() {\n            this.selectComponent('#form').validate((valid, errors) => {\n                // console.log('valid', valid, errors)\n                if (!valid) {\n                    const firstError = Object.keys(errors)\n                    if (firstError.length) {\n                        this.setData({\n                            error: errors[firstError[0]].message\n                        })\n                    }\n                } else {\n                    wx.showToast({\n                        title: '校验通过'\n                    })\n                }\n            })\n            // this.selectComponent('#form').validateField('mobile', (valid, errors) => {\n            //     console.log('valid', valid, errors)\n            // })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/form/__test__/comp/index.wxml",
    "content": "<mp-form id=\"form\" rules=\"{{rules}}\" models=\"{{formData}}\">\n    <mp-cells title=\"单选列表项\">\n        <mp-checkbox-group prop=\"radio\" multi=\"{{false}}\" bindchange=\"radioChange\">\n            <mp-checkbox wx:for=\"{{radioItems}}\" wx:key=\"value\" label=\"{{item.name}}\" value=\"{{item.value}}\" checked=\"{{item.checked}}\"></mp-checkbox>\n        </mp-checkbox-group>\n    </mp-cells>\n    <mp-cells title=\"复选列表项\">\n        <mp-checkbox-group prop=\"checkbox\" multi=\"{{true}}\" bindchange=\"checkboxChange\">\n            <mp-checkbox wx:for=\"{{checkboxItems}}\" wx:key=\"value\" label=\"{{item.name}}\" value=\"{{item.value}}\" checked=\"{{item.checked}}\"></mp-checkbox>\n        </mp-checkbox-group>\n    </mp-cells>\n    <mp-cells title=\"表单\" footer=\"底部说明文字底部说明文字\">\n        <mp-cell prop=\"name\" title=\"姓名\" ext-class=\"\">\n            <input bindinput=\"formInputChange\" data-field=\"name\" class=\"weui-input\" placeholder=\"请输入姓名\" />\n        </mp-cell>\n        <mp-cell prop=\"qq\" title=\"qq\" ext-class=\"\">\n            <input bindinput=\"formInputChange\" data-field=\"qq\" class=\"weui-input\" placeholder=\"请输入qq\" />\n        </mp-cell>\n        <mp-cell prop=\"mobile\" title=\"手机号\" ext-class=\" weui-cell_vcode\">\n            <input bindinput=\"formInputChange\" data-field=\"mobile\" class=\"weui-input\" placeholder=\"请输入手机号\" />\n            <button slot=\"footer\" type=\"default\" class=\"weui-vcode-btn\">获取验证码</button>\n        </mp-cell>\n        <mp-cell prop=\"date\" title=\"日期\" ext-class=\"\">\n            <picker data-field=\"date\" mode=\"date\" value=\"{{date}}\" start=\"2015-09-01\" end=\"2017-09-01\" bindchange=\"bindDateChange\">\n                <view class=\"weui-input\">{{date}}</view>\n            </picker>\n        </mp-cell>\n        <mp-cell prop=\"vcode\" title=\"验证码\" ext-class=\" weui-cell_vcode\">\n            <input bindinput=\"formInputChange\" data-field=\"vcode\" class=\"weui-input\" placeholder=\"请输入验证码\" />\n            <image slot=\"footer\" class=\"weui-vcode-img\" src=\"../images/vcode.jpg\" style=\"width: 108px\"></image>\n        </mp-cell>\n    </mp-cells>\n    <mp-cells title=\"提交后表单项报错\">\n        <mp-cell show-error prop=\"idcard\" title=\"卡号\" ext-class=\"\">\n            <input bindinput=\"formInputChange\" data-field=\"idcard\" class=\"weui-input\" placeholder=\"请输入卡号\" />\n        </mp-cell>\n    </mp-cells>\n    <mp-cells title=\"开关\">\n        <mp-cell title=\"标题文字\" ext-class=\"\">\n            <switch slot=\"footer\" checked />\n        </mp-cell>\n    </mp-cells>\n    <mp-cells title=\"文本框\">\n        <mp-cell title=\"标题文字\" ext-class=\"\">\n            <input class=\"weui-input\" placeholder=\"请输入文本\" />\n        </mp-cell>\n    </mp-cells>\n    <mp-cells title=\"文本域\">\n        <mp-cell has-header=\"{{false}}\" has-footer=\"{{false}}\" title=\"\" ext-class=\"\">\n            <textarea class=\"weui-textarea\" placeholder=\"请输入文本\" style=\"height: 3.3em\" />\n            <view class=\"weui-textarea-counter\">0/200</view>\n        </mp-cell>\n    </mp-cells>\n    <mp-cells title=\"选择\">\n        <mp-cell ext-class=\"weui-cell_select weui-cell_select-before\">\n            <view slot=\"title\" style=\"width: 105px\">\n                <picker bindchange=\"bindCountryCodeChange\" value=\"{{countryCodeIndex}}\" range=\"{{countryCodes}}\">\n                    <view class=\"weui-select\">{{countryCodes[countryCodeIndex]}}</view>\n                </picker>\n            </view>\n            <input class=\"weui-input\" placeholder=\"请输入号码\" />\n        </mp-cell>\n    </mp-cells>\n    <mp-cells title=\"选择\">\n        <mp-cell has-header=\"{{false}}\" ext-class=\"weui-cell_select\">\n            <picker bindchange=\"bindAccountChange\" value=\"{{accountIndex}}\" range=\"{{accounts}}\">\n                <view class=\"weui-select\">{{accounts[accountIndex]}}</view>\n            </picker>\n        </mp-cell>\n        <mp-cell ext-class=\"weui-cell_select weui-cell_select-after\">\n            <view slot=\"title\" class=\"weui-label\">国家/地区</view>\n            <picker bindchange=\"bindCountryChange\" value=\"{{countryIndex}}\" range=\"{{countries}}\">\n                <view class=\"weui-select\">{{countries[countryIndex]}}</view>\n            </picker>\n        </mp-cell>\n    </mp-cells>\n    <button class=\"submit\" bindtap=\"submitForm\">提交</button>\n</mp-form>"
  },
  {
    "path": "src/components/form/__test__/form-validator.test.ts",
    "content": "import FormValidator from '../form-validator'\n\ndescribe('form-validator', () => {\n    test('basic usage', async () => {\n        const formValidator = new FormValidator(\n            { username: 'bar' },\n            {\n                username: [\n                    {\n                        required: true\n                    }\n                ]\n            }\n        )\n        const { isValid, errors } = await formValidator.validate()\n        expect(isValid).toBe(true)\n        expect(errors).toBe(undefined)\n    })\n\n    test('invalid', async () => {\n        const formValidator = new FormValidator(\n            { username: 'bar', password: '123', repeatPassword: '' },\n            {\n                username: [\n                    {\n                        required: true\n                    },\n                    {\n                        minlength: 3\n                    }\n                ],\n                password: [{ required: true }, { minlength: 6 }],\n                repeatPassword: [{ required: true }, { equalTo: 'password' }]\n            }\n        )\n        const { isValid, errors } = await formValidator.validate()\n        expect(isValid).toBe(false)\n        expect(errors).toStrictEqual({\n            password: { message: '长度最少为6', rule: { minlength: 6, name: 'password' } },\n            repeatPassword: {\n                message: 'repeatPassword必填',\n                rule: { name: 'repeatPassword', required: true }\n            }\n        })\n    })\n})\n"
  },
  {
    "path": "src/components/form/__test__/form.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('form', () => {\n    let id: string\n\n    beforeAll(() => {\n        id = simulate.load(path.resolve(__dirname, './comp/index'), { less: true })\n    })\n\n    test('basic', async () => {\n        const comp = simulate.render(id)\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        // const form = comp.querySelector('#form')\n        const submit = comp.querySelector('.submit')\n\n        submit.dispatchEvent('tap')\n        await simulate.sleep(0)\n        expect(comp.data.error).toBe('多选列表是必选项')\n    })\n})\n"
  },
  {
    "path": "src/components/form/__test__/validator.test.ts",
    "content": "import Validators from '../validator'\n\ndescribe('required', () => {\n    test('success', () => {\n        expect(Validators.required({ name: '姓名', required: true }, '张三')).toBe('')\n    })\n\n    test('empty should fail', () => {\n        expect(Validators.required({ name: '姓名', required: true }, '')).toBe('姓名必填')\n        expect(Validators.required({ name: '姓名', required: true }, null)).toBe('姓名必填')\n        expect(Validators.required({ name: '姓名', required: true }, undefined)).toBe('姓名必填')\n    })\n\n    test('0 or false should success', () => {\n        expect(Validators.required({ name: '姓名', required: true }, 0)).toBe('')\n        expect(Validators.required({ name: '姓名', required: true }, false)).toBe('')\n    })\n})\n\ndescribe('minlength', () => {\n    test('success', () => {\n        expect(Validators.minlength({ name: '姓名', minlength: 2 }, '张三')).toBe('')\n    })\n\n    test('fail', () => {\n        expect(Validators.minlength({ name: '姓名', minlength: 2 }, '张')).toBe('长度最少为2')\n    })\n})\n\ndescribe('maxlength', () => {\n    test('success', () => {\n        expect(Validators.maxlength({ name: '姓名', maxlength: 5 }, '张三张三张')).toBe('')\n    })\n\n    test('fail', () => {\n        expect(Validators.maxlength({ name: '姓名', maxlength: 5 }, '张张张张张张')).toBe(\n            '长度最大为5'\n        )\n    })\n})\n\ndescribe('rangelength', () => {\n    test('success', () => {\n        expect(Validators.rangelength({ name: '姓名', rangelength: [2, 3] }, '张三')).toBe('')\n    })\n\n    test('fail', () => {\n        expect(Validators.rangelength({ name: '姓名', rangelength: [2, 3] }, '张')).toBe(\n            '长度在2和3之间'\n        )\n        expect(Validators.rangelength({ name: '姓名', rangelength: [2, 3] }, '张三张三')).toBe(\n            '长度在2和3之间'\n        )\n    })\n})\n\ndescribe('min', () => {\n    test('success', () => {\n        expect(Validators.min({ name: '年龄', min: 0 }, 0)).toBe('')\n    })\n\n    test('fail', () => {\n        expect(Validators.min({ name: '年龄', min: 0 }, -1)).toBe('值最小为0')\n    })\n})\n\ndescribe('max', () => {\n    test('success', () => {\n        expect(Validators.max({ name: '年龄', max: 100 }, 100)).toBe('')\n    })\n\n    test('fail', () => {\n        expect(Validators.max({ name: '年龄', max: 100 }, 101)).toBe('值最大为100')\n    })\n})\n\ndescribe('range', () => {\n    test('success', () => {\n        expect(Validators.range({ name: '年龄', range: [0, 100] }, 0)).toBe('')\n        expect(Validators.range({ name: '年龄', range: [0, 100] }, 100)).toBe('')\n    })\n\n    test('fail', () => {\n        expect(Validators.range({ name: '年龄', range: [0, 100] }, -1)).toBe('值的范围为0和100之间')\n        expect(Validators.range({ name: '年龄', range: [0, 100] }, 101)).toBe(\n            '值的范围为0和100之间'\n        )\n    })\n})\n\ndescribe('mobile', () => {\n    test('success', () => {\n        expect(Validators.mobile({ name: '手机号' }, '12345678901')).toBe('')\n    })\n})\n\ndescribe('email', () => {\n    test('success', () => {\n        expect(Validators.email({ name: '邮箱' }, '123@123.com')).toBe('')\n    })\n\n    test('fail', () => {\n        expect(Validators.email({ name: '邮箱' }, '123@123')).toBe('请输入正确的电子邮件')\n    })\n})\n\ndescribe('url', () => {\n    test('success', () => {\n        expect(Validators.url({ name: 'url' }, 'https://qq.com')).toBe('')\n        expect(Validators.url({ name: 'url' }, 'weixin://qq.com')).toBe('')\n    })\n\n    test('fail', () => {\n        expect(Validators.url({ name: 'url' }, 'https:/qq.com')).toBe('请输入正确的URL地址')\n        expect(Validators.url({ name: 'url' }, 'weixin:// qq.com')).toBe('请输入正确的URL地址')\n    })\n})\n\ndescribe('equalTo', () => {\n    test('success', () => {\n        expect(Validators.equalTo({ equalTo: 'b' }, 'foo', null, { b: 'foo' })).toBe('')\n    })\n\n    test('success', () => {\n        expect(Validators.equalTo({ equalTo: 'b', name: 'B' }, 'foo', null, { b: 'bar' })).toBe(\n            '值和字段B不相等'\n        )\n    })\n})\n\ndescribe('bytelength', () => {\n    test('success', () => {\n        expect(Validators.bytelength({ param: 3 }, 'foo', null)).toBe('')\n        expect(Validators.bytelength({ param: 2 }, '蛤', null)).toBe('')\n    })\n\n    test('fail', () => {\n        expect(Validators.bytelength({ param: 2 }, 'f蛤', null)).toBe('最多只能输入2个字')\n    })\n})\n"
  },
  {
    "path": "src/components/form/form-validator.ts",
    "content": "import Validator from './validator'\nimport { diff } from '../utils/object'\n\nconst toString = Object.prototype.toString\nconst validateSingleRule = (rule: any, value: any, param: any = null, models = null) => {\n    let message = ''\n    const ruleKeys = Object.keys(rule)\n\n    for (let i = 0, l = ruleKeys.length; i < l; ++i) {\n        const ruleKey = ruleKeys[i]\n        if (ruleKey === 'name' || ruleKey === 'message') continue\n        const validateMethod =\n            typeof rule.validator !== 'undefined' ? rule.validator : Validator[ruleKey]\n        if (typeof validateMethod === 'function') {\n            message = validateMethod(rule, value, param, models)\n            if (message) {\n                return message\n            }\n        }\n    }\n    return message\n}\nclass FormValidator {\n    models: {}\n\n    rules: {}\n\n    errors: {}\n\n    constructor(models, rules) {\n        this.models = models\n        this.rules = rules\n        this.errors = {}\n    }\n\n    validate(): Promise<{ isValid: boolean; errors: any }>\n    validate(cb: (isValid: boolean, errors: any) => void): void\n    validate(cb?: any) {\n        return new Promise((resolve) => {\n            let failCount = 0\n            const errors = this.errors\n            const models = this.models\n            // let errorChanged = false\n            Object.keys(this.rules).forEach((fieldName) => {\n                const oldError = errors[fieldName]\n                this._innerValidateField(fieldName, models[fieldName], (valid, newError) => {\n                    if (!valid) failCount++\n                    if (diff(oldError, newError)) {\n                        errors[fieldName] = newError\n                        // errorChanged = true\n                    }\n                })\n            })\n            const keys = Object.keys(errors)\n            keys.forEach((key) => {\n                if (!errors[key]) delete errors[key]\n            })\n            // 先支持同步的接口吧\n            resolve({ isValid: !failCount, errors: failCount ? errors : undefined })\n            cb && cb(!failCount, failCount ? errors : undefined)\n        })\n    }\n\n    validateField(name: string, value: any): Promise<{ valid: boolean; error: any }>\n    validateField(name: string, value: any, cb: (isValid: boolean, errors: any[]) => void): void\n    validateField(name, value, cb?) {\n        return new Promise((resolve) => {\n            this._innerValidateField(name, value, (valid, error) => {\n                const errObj = {}\n                errObj[name] = error\n                resolve({ valid, error: valid ? undefined : error })\n                cb && cb(valid, valid ? undefined : errObj)\n                const oldError = this.errors[name]\n                const errorChanged = diff(oldError, error)\n                if (errorChanged) {\n                    if (!error) delete this.errors[name]\n                    this.errors[name] = error\n                }\n            })\n        })\n    }\n\n    _innerValidateField(name, value, cb) {\n        const rules = this.rules[name]\n        if (!rules) {\n            console.warn(`[form-validator] rule name ${name} not exists.`)\n            cb(true)\n            return\n        }\n        // 处理参数\n        if (typeof value === 'function') {\n            cb = value\n            value = undefined\n        }\n        let isFail = false\n        const models = this.models\n        if (toString.call(rules) === '[object Array]') {\n            rules.forEach((rule) => {\n                rule.name = name // 字段名称\n                const resMessage = validateSingleRule(\n                    rule,\n                    value || models[name],\n                    rule.param,\n                    models\n                )\n                // 失败了直接中止\n                if (resMessage && !isFail) {\n                    isFail = true\n                    // errors[name] = {message: resMessage}\n                    const error = resMessage ? { message: resMessage, rule } : undefined\n                    cb(false, error)\n                }\n            })\n            // 成功的回调\n            if (!isFail) {\n                cb(!isFail)\n            }\n        } else {\n            const rule = rules\n            rule.name = name\n            const resMessage = validateSingleRule(rule, value || models[name], rule.param, models)\n            const error = resMessage ? { message: resMessage, rule } : undefined\n            if (resMessage) {\n                isFail = true\n            }\n            cb(!isFail, error)\n        }\n    }\n\n    static addMethod(ruleName, method) {\n        Validator[ruleName] = method\n    }\n\n    setModel(newModel) {\n        this.models = newModel\n    }\n\n    setRules(newRules) {\n        this.rules = newRules\n    }\n}\nexport default FormValidator\n"
  },
  {
    "path": "src/components/form/form.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/form/form.ts",
    "content": "import FormValidator from './form-validator'\nimport { diffObject } from '../utils/object'\n\nfunction linked(target) {\n    if (target.data.prop) {\n        this.data.formItems[target.data.prop] = target\n    }\n    if (target.setInForm) {\n        target.setInForm()\n    }\n    if (!this.data.firstItem) {\n        this.data.firstItem = target\n    }\n}\nfunction unlinked(target) {\n    if (target.data.prop) {\n        delete this.data.formItems[target.data.prop]\n    }\n}\n\nComponent({\n    properties: {\n        models: {\n            type: Object,\n            value: {},\n            observer: '_modelChange'\n        },\n        rules: {\n            // 格式是[{name, rules: {}}]\n            type: Array,\n            value: [],\n            observer: '_rulesChange'\n        },\n        extClass: {\n            type: String,\n            value: ''\n        }\n    },\n    data: {\n        errors: {},\n        formItems: {},\n        firstItem: null\n    },\n    relations: {\n        '../cell/cell': {\n            type: 'descendant',\n            linked,\n            unlinked\n        },\n        '../checkbox-group/checkbox-group': {\n            type: 'descendant',\n            linked,\n            unlinked\n        }\n    },\n    attached() {\n        this.initRules()\n        this.formValidator = new FormValidator(this.data.models, this.data.newRules)\n    },\n    methods: {\n        initRules(rules) {\n            const newRules = {}\n            ;(rules || this.data.rules).forEach((rule) => {\n                if (rule.name && rule.rules) {\n                    newRules[rule.name] = rule.rules || []\n                }\n            })\n            this.setData({ newRules })\n            return newRules\n        },\n        _modelChange(newVal, oldVal) {\n            if (!this.formValidator) {\n                return newVal\n            }\n            // 这个必须在前面\n            this.formValidator.setModel(newVal)\n            const diffObj: any = diffObject(oldVal, newVal)\n            if (diffObj) {\n                let isValid = true\n                const errors = []\n                const errorMap = {}\n                Object.keys(diffObj).forEach((k) => {\n                    this.formValidator.validateField(k, diffObj[k], function (isValided, error) {\n                        if (error && error[k]) {\n                            errors.push(error[k])\n                            errorMap[k] = error[k]\n                        }\n                        isValid = isValided\n                    })\n                })\n                this._showErrors(diffObj, errorMap)\n                this.triggerEvent(\n                    isValid ? 'success' : 'fail',\n                    isValid ? { trigger: 'change' } : { errors, trigger: 'change' }\n                )\n            }\n            return newVal\n        },\n        _rulesChange(newVal) {\n            const newRules = this.initRules(newVal)\n            if (this.formValidator) {\n                this.formValidator.setRules(newRules)\n            }\n            return newVal\n        },\n        _showAllErrors(errors) {\n            Object.keys(this.data.newRules).forEach((k) => {\n                this._showError(k, errors && errors[k])\n            })\n        },\n        _showErrors(objs, errors) {\n            Object.keys(objs).forEach((k) => {\n                this._showError(k, errors && errors[k])\n            })\n        },\n        _showError(prop, error) {\n            const formItem = this.data.formItems[prop]\n            if (formItem && formItem.data.showError) {\n                formItem.setError(error)\n            }\n        },\n        validate(cb) {\n            return this.formValidator.validate((isValid, errors) => {\n                this._showAllErrors(errors)\n                const handleError = this.handleErrors(errors)\n                this.triggerEvent(\n                    isValid ? 'success' : 'fail',\n                    isValid ? { trigger: 'validate' } : { errors: handleError, trigger: 'validate' }\n                )\n                cb && cb(isValid, handleError)\n            })\n        },\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        validateField(name, value, cb = (v, error = null) => {}) {\n            return this.formValidator.validateField(name, value, (isValid, errors) => {\n                this._showError(name, errors)\n                const handleError = this.handleErrors(errors)\n                this.triggerEvent(\n                    isValid ? 'success' : 'fail',\n                    isValid ? { trigger: 'validate' } : { errors: handleError, trigger: 'validate' }\n                )\n                cb && cb(isValid, handleError)\n            })\n        },\n        handleErrors(errors) {\n            if (errors) {\n                const newErrors = []\n                this.data.rules.forEach((rule) => {\n                    if (errors[rule.name]) {\n                        errors[rule.name].name = rule.name\n                        newErrors.push(errors[rule.name])\n                    }\n                })\n                return newErrors\n            }\n            return errors\n        },\n        addMethod(ruleName, method) {\n            return this.formValidator.addMethod(ruleName, method)\n        }\n    }\n})\nexport default FormValidator\n"
  },
  {
    "path": "src/components/form/form.wxml",
    "content": "<view class=\"{{extClass}}\">\n    <slot></slot>\n</view>"
  },
  {
    "path": "src/components/form/validator.ts",
    "content": "import { sprintf } from '../utils/string'\n\nconst defaultMessage = {\n    required: '%s必填',\n    minlength: '长度最少为%s',\n    maxlength: '长度最大为%s',\n    rangelength: '长度在%s和%s之间',\n    bytelength: '最多只能输入%s个字',\n    min: '值最小为%s',\n    max: '值最大为%s',\n    range: '值的范围为%s和%s之间',\n    mobile: '请输入正确的手机号',\n    email: '请输入正确的电子邮件',\n    url: '请输入正确的URL地址',\n    equalTo: '值和字段%s不相等'\n}\n\nconst isEmpty = function (val): boolean {\n    if (val === 0 || val === false) return false\n    return !val\n}\n\nexport default {\n    required(r, val): string {\n        if (r.required === false) return ''\n        else if (isEmpty(val)) return sprintf(r.message || defaultMessage.required, r.name)\n        else return ''\n    },\n    minlength(r, val) {\n        const minlen = r.minlength\n        val = val || ''\n        if (val.length < minlen) return sprintf(r.message || defaultMessage.minlength, minlen)\n        else return ''\n    },\n    maxlength(r, val) {\n        const maxlen = r.maxlength\n        val = val || ''\n        if (val.length > maxlen) {\n            return sprintf(r.message || defaultMessage.maxlength, maxlen)\n        } else {\n            return ''\n        }\n    },\n    rangelength(r, val) {\n        const range = r.rangelength\n        val = val || ''\n        if (val.length > range[1] || val.length < range[0]) {\n            return sprintf(r.message || defaultMessage.rangelength, range[0], range[1])\n        } else {\n            return ''\n        }\n    },\n    min(r, val) {\n        const min = r.min\n        if (val < min) {\n            return sprintf(r.message || defaultMessage.min, min)\n        } else {\n            return ''\n        }\n    },\n    max(r, val) {\n        const max = r.max\n        if (val > max) {\n            return sprintf(r.message || defaultMessage.max, max)\n        } else {\n            return ''\n        }\n    },\n    range(r, val) {\n        const range = r.range\n        if (val < range[0] || val > range[1]) {\n            return sprintf(r.message || defaultMessage.range, range[0], range[1])\n        } else {\n            return ''\n        }\n    },\n    mobile(r, val) {\n        val = val || ''\n        if (r.mobile === false) {\n            return ''\n        } else if (val.length !== 11) {\n            return sprintf(r.message || defaultMessage.mobile)\n        } else {\n            return ''\n        }\n    },\n    email(r, value) {\n        if (r.email === false) return ''\n        // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\n        // eslint-disable-next-line\n    if (!/^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i.test(value)) {\n            return sprintf(r.message || defaultMessage.email)\n        } else {\n            return ''\n        }\n    },\n\n    // http://docs.jquery.com/Plugins/Validation/Methods/url\n    url(r, value) {\n        if (r.url === false) return ''\n        // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n        if (\n            // eslint-disable-next-line no-useless-escape\n            !/^(https?|s?ftp|weixin):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(\n                value\n            )\n        ) {\n            return r.message || defaultMessage.url\n        } else {\n            return ''\n        }\n    },\n    equalTo(r, value, param, models) {\n        const equalTo = r.equalTo\n        if (value !== models[equalTo]) {\n            return sprintf(r.message || defaultMessage.equalTo, r.name)\n        } else {\n            return ''\n        }\n    },\n    bytelength(r, value, param) {\n        param = r.param\n        value = value || ''\n        // eslint-disable-next-line no-control-regex\n        const len = value.replace(/[^\\x00-\\xff]/g, '**').length\n        if (len > param) {\n            return sprintf(r.message || defaultMessage.bytelength, param)\n        } else {\n            return ''\n        }\n    }\n}\n"
  },
  {
    "path": "src/components/form-page/__test__/__snapshots__/form-page.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`form-page basic 1`] = `\n<main>\n  <mp-form-page>\n    <wx-view\n      class=\"weui-form\"\n    >\n      <wx-view\n        class=\"weui-form__text-area\"\n      >\n        <wx-view\n          class=\"weui-form__title\"\n        >\n          表单结构\n        </wx-view>\n        <wx-view\n          class=\"weui-form__desc\"\n        >\n          展示表单页面的信息结构样式, 分别由头部区域/控件区域/提示区域/操作区域和底部信息区域组成。\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-form__control-area\"\n      >\n        <wx-view>\n          <mp-cells>\n            <wx-view\n              ariaRole=\"\"\n              class=\" weui-cells__group weui-cells__group weui-cells__group_form weui-cells_form \"\n            >\n              <wx-view\n                class=\"weui-cells__title\"\n              >\n                单选列表项\n              </wx-view>\n              <wx-view\n                class=\"weui-cells weui-cells_after-title \"\n              />\n            </wx-view>\n          </mp-cells>\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-form__tips-area\"\n      />\n      <wx-view\n        class=\"weui-form__opr-area\"\n      >\n        <wx-view\n          slot=\"button\"\n        >\n          <wx-button\n            class=\"weui-btn\"\n            type=\"primary\"\n            bind:tap=\"submitForm\"\n          >\n            确定\n          </wx-button>\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-form__tips-area\"\n      />\n      <wx-view\n        class=\"weui-form__extra-area\"\n      >\n        <wx-view\n          class=\"weui-footer\"\n        />\n      </wx-view>\n    </wx-view>\n  </mp-form-page>\n</main>\n`;\n"
  },
  {
    "path": "src/components/form-page/__test__/form-page.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('form-page', () => {\n    const id = simulate.load(path.resolve(__dirname, './index'))\n\n    test('basic', async () => {\n        const comp = simulate.render(id)\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n})\n"
  },
  {
    "path": "src/components/form-page/__test__/index.js",
    "content": "Component({})\n"
  },
  {
    "path": "src/components/form-page/__test__/index.json",
    "content": "{\n    \"usingComponents\": {\n        \"mp-form-page\": \"../form-page\",\n        \"mp-cells\": \"../../cells/cells\"\n    }\n}"
  },
  {
    "path": "src/components/form-page/__test__/index.wxml",
    "content": "<mp-form-page title=\"表单结构\" subtitle=\"展示表单页面的信息结构样式, 分别由头部区域/控件区域/提示区域/操作区域和底部信息区域组成。\">\n    <view>\n        <mp-cells title=\"单选列表项\"></mp-cells>\n    </view>\n    <view slot=\"button\">\n        <button class=\"weui-btn\" type=\"primary\" bindtap=\"submitForm\">确定</button>\n    </view>\n</mp-form-page>"
  },
  {
    "path": "src/components/form-page/form-page.json",
    "content": "{\n  \"component\": true,\n  \"styleIsolation\": \"apply-shared\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/form-page/form-page.less",
    "content": ""
  },
  {
    "path": "src/components/form-page/form-page.ts",
    "content": "Component({\n    options: {\n        multipleSlots: true\n    },\n    properties: {\n        title: {\n            // Msg 标题\n            type: String,\n            value: ''\n        },\n        subtitle: {\n            // icon 的 type\n            type: String,\n            value: ''\n        }\n    },\n    relations: {\n        '../cells/cells': {\n            type: 'descendant',\n            linked(target) {\n                if (!this.data.firstItem) {\n                    this.data.firstItem = target\n                }\n                target.setOuterClass('weui-cells__group weui-cells__group_form weui-cells_form')\n                if (target !== this.data.firstItem) {\n                    target.setOuterClass(\n                        'weui-cells__group_wxss weui-cells__group weui-cells__group_form weui-cells_form'\n                    )\n                }\n            }\n        }\n    },\n    data: {\n        firstItem: null\n    }\n})\n"
  },
  {
    "path": "src/components/form-page/form-page.wxml",
    "content": "<view class=\"weui-form\">\n    <block wx:if=\"{{title || subtitle}}\">\n      <view class=\"weui-form__text-area\">\n          <view class=\"weui-form__title\">{{title}}</view>\n          <view class=\"weui-form__desc\">{{subtitle}}</view>\n      </view>\n    </block>\n    <block wx:else>\n      <view class=\"weui-form__text-area\">\n        <slot name=\"title\"></slot>\n      </view>\n    </block>\n  <view class=\"weui-form__control-area\">\n    <slot></slot>\n  </view>\n  <view class=\"weui-form__tips-area\">\n    <slot name=\"tips\"></slot>\n  </view>\n  <view class=\"weui-form__opr-area\">\n    <slot name=\"button\"></slot>\n  </view>\n  <view class=\"weui-form__tips-area\">\n    <slot name=\"suffixtips\"></slot>\n  </view>\n  <view class=\"weui-form__extra-area\">\n    <view class=\"weui-footer\">\n      <slot name=\"footer\"></slot>\n    </view>\n  </view>\n</view>\n\n"
  },
  {
    "path": "src/components/gallery/__test__/__snapshots__/gallery.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`gallery basic 1`] = `\n<mp-gallery\n  delete=\"{{true}}\"\n  id=\"gallery\"\n  bind:change=\"onChange\"\n  bind:delete=\"onDelete\"\n  bind:hide=\"onHide\"\n/>\n`;\n\nexports[`gallery basic 2`] = `\n<mp-gallery\n  delete=\"{{true}}\"\n  id=\"gallery\"\n  bind:change=\"onChange\"\n  bind:delete=\"onDelete\"\n  bind:hide=\"onHide\"\n>\n  <wx-root-portal\n    enable=\"{{true}}\"\n  >\n    <wx-view\n      ariaModal=\"true\"\n      class=\"root-portal-box weui-gallery weui-animate-fade-in \"\n      tabindex=\"0\"\n    >\n      <wx-view\n        class=\"weui-gallery__info\"\n      >\n        1/3\n      </wx-view>\n      <wx-swiper\n        autoplay=\"{{false}}\"\n        class=\"weui-gallery__img__wrp\"\n        current=\"{{0}}\"\n        duration=\"{{500}}\"\n        indicatorDots=\"{{false}}\"\n        bind:change=\"change\"\n        bind:tap=\"hideGallery\"\n      >\n        <wx-swiper-item>\n          <wx-image\n            class=\"weui-gallery__img\"\n            mode=\"aspectFit\"\n            src=\"http://qq.com/1.jpg\"\n          />\n        </wx-swiper-item>\n        <wx-swiper-item>\n          <wx-image\n            class=\"weui-gallery__img\"\n            mode=\"aspectFit\"\n            src=\"http://qq.com/2.jpg\"\n          />\n        </wx-swiper-item>\n        <wx-swiper-item>\n          <wx-image\n            class=\"weui-gallery__img\"\n            mode=\"aspectFit\"\n            src=\"http://qq.com/3.jpg\"\n          />\n        </wx-swiper-item>\n      </wx-swiper>\n      <wx-view\n        class=\"weui-gallery__opr\"\n      >\n        <wx-view\n          ariaLabel=\"删除\"\n          ariaRole=\"button\"\n          class=\"weui-gallery__del\"\n          hoverClass=\"weui-active\"\n          bind:tap=\"deleteImg\"\n        >\n          <i\n            class=\"weui-icon-delete weui-icon_gallery-delete\"\n          />\n        </wx-view>\n      </wx-view>\n    </wx-view>\n  </wx-root-portal>\n</mp-gallery>\n`;\n\nexports[`gallery basic 3`] = `\n<mp-gallery\n  delete=\"{{true}}\"\n  id=\"gallery\"\n  bind:change=\"onChange\"\n  bind:delete=\"onDelete\"\n  bind:hide=\"onHide\"\n>\n  <wx-root-portal\n    enable=\"{{true}}\"\n  >\n    <wx-view\n      ariaModal=\"true\"\n      class=\"root-portal-box weui-gallery weui-animate-fade-in \"\n      tabindex=\"0\"\n    >\n      <wx-view\n        class=\"weui-gallery__info\"\n      >\n        2/3\n      </wx-view>\n      <wx-swiper\n        autoplay=\"{{false}}\"\n        class=\"weui-gallery__img__wrp\"\n        current=\"{{1}}\"\n        duration=\"{{500}}\"\n        indicatorDots=\"{{false}}\"\n        bind:change=\"change\"\n        bind:tap=\"hideGallery\"\n      >\n        <wx-swiper-item>\n          <wx-image\n            class=\"weui-gallery__img\"\n            mode=\"aspectFit\"\n            src=\"http://qq.com/1.jpg\"\n          />\n        </wx-swiper-item>\n        <wx-swiper-item>\n          <wx-image\n            class=\"weui-gallery__img\"\n            mode=\"aspectFit\"\n            src=\"http://qq.com/2.jpg\"\n          />\n        </wx-swiper-item>\n        <wx-swiper-item>\n          <wx-image\n            class=\"weui-gallery__img\"\n            mode=\"aspectFit\"\n            src=\"http://qq.com/3.jpg\"\n          />\n        </wx-swiper-item>\n      </wx-swiper>\n      <wx-view\n        class=\"weui-gallery__opr\"\n      >\n        <wx-view\n          ariaLabel=\"删除\"\n          ariaRole=\"button\"\n          class=\"weui-gallery__del\"\n          hoverClass=\"weui-active\"\n          bind:tap=\"deleteImg\"\n        >\n          <i\n            class=\"weui-icon-delete weui-icon_gallery-delete\"\n          />\n        </wx-view>\n      </wx-view>\n    </wx-view>\n  </wx-root-portal>\n</mp-gallery>\n`;\n\nexports[`gallery basic 4`] = `\n<mp-gallery\n  delete=\"{{true}}\"\n  id=\"gallery\"\n  bind:change=\"onChange\"\n  bind:delete=\"onDelete\"\n  bind:hide=\"onHide\"\n>\n  <wx-root-portal\n    enable=\"{{true}}\"\n  >\n    <wx-view\n      ariaModal=\"true\"\n      class=\"root-portal-box weui-gallery weui-animate-fade-in \"\n      tabindex=\"0\"\n    >\n      <wx-view\n        class=\"weui-gallery__info\"\n      >\n        1/2\n      </wx-view>\n      <wx-swiper\n        autoplay=\"{{false}}\"\n        class=\"weui-gallery__img__wrp\"\n        current=\"{{0}}\"\n        duration=\"{{500}}\"\n        indicatorDots=\"{{false}}\"\n        bind:change=\"change\"\n        bind:tap=\"hideGallery\"\n      >\n        <wx-swiper-item>\n          <wx-image\n            class=\"weui-gallery__img\"\n            mode=\"aspectFit\"\n            src=\"http://qq.com/1.jpg\"\n          />\n        </wx-swiper-item>\n        <wx-swiper-item>\n          <wx-image\n            class=\"weui-gallery__img\"\n            mode=\"aspectFit\"\n            src=\"http://qq.com/3.jpg\"\n          />\n        </wx-swiper-item>\n      </wx-swiper>\n      <wx-view\n        class=\"weui-gallery__opr\"\n      >\n        <wx-view\n          ariaLabel=\"删除\"\n          ariaRole=\"button\"\n          class=\"weui-gallery__del\"\n          hoverClass=\"weui-active\"\n          bind:tap=\"deleteImg\"\n        >\n          <i\n            class=\"weui-icon-delete weui-icon_gallery-delete\"\n          />\n        </wx-view>\n      </wx-view>\n    </wx-view>\n  </wx-root-portal>\n</mp-gallery>\n`;\n\nexports[`gallery basic 5`] = `\n<mp-gallery\n  delete=\"{{true}}\"\n  id=\"gallery\"\n  bind:change=\"onChange\"\n  bind:delete=\"onDelete\"\n  bind:hide=\"onHide\"\n>\n  <wx-root-portal\n    enable=\"{{true}}\"\n  >\n    <wx-view\n      ariaModal=\"true\"\n      class=\"root-portal-box weui-gallery weui-animate-fade-out \"\n      tabindex=\"0\"\n    >\n      <wx-view\n        class=\"weui-gallery__info\"\n      >\n        2/0\n      </wx-view>\n      <wx-swiper\n        autoplay=\"{{false}}\"\n        class=\"weui-gallery__img__wrp\"\n        current=\"{{1}}\"\n        duration=\"{{500}}\"\n        indicatorDots=\"{{false}}\"\n        bind:change=\"change\"\n        bind:tap=\"hideGallery\"\n      />\n      <wx-view\n        class=\"weui-gallery__opr\"\n      >\n        <wx-view\n          ariaLabel=\"删除\"\n          ariaRole=\"button\"\n          class=\"weui-gallery__del\"\n          hoverClass=\"weui-active\"\n          bind:tap=\"deleteImg\"\n        >\n          <i\n            class=\"weui-icon-delete weui-icon_gallery-delete\"\n          />\n        </wx-view>\n      </wx-view>\n    </wx-view>\n  </wx-root-portal>\n</mp-gallery>\n`;\n"
  },
  {
    "path": "src/components/gallery/__test__/gallery.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('gallery', () => {\n    const gallery = simulate.load(path.resolve(__dirname, '../gallery'), 'mp-gallery')\n\n    const onChange = jest.fn(function (e) {\n        this.setData({\n            current: e.detail.current\n        })\n    })\n\n    const onDelete = jest.fn(function (e) {\n        this.setData({\n            imgUrls: e.detail.currentImgs\n        })\n    })\n\n    const onHide = jest.fn(function () {\n        this.setData({\n            show: false\n        })\n    })\n\n    const id = simulate.load({\n        template: `\n            <mp-gallery\n                id=\"gallery\"\n                show=\"{{show}}\"\n                bindchange=\"onChange\"\n                binddelete=\"onDelete\"\n                bindhide=\"onHide\"\n                img-urls=\"{{imgUrls}}\"\n                delete\n                hide-on-click=\"{{true}}\"\n                current=\"{{current}}\"\n            ></mp-gallery>\n        `,\n        usingComponents: {\n            'mp-gallery': gallery\n        },\n        data: {\n            imgUrls: ['http://qq.com/1.jpg', 'http://qq.com/2.jpg', 'http://qq.com/3.jpg'],\n            current: 0,\n            show: false\n        },\n        methods: {\n            onChange,\n            onDelete,\n            onHide\n        }\n    })\n\n    test('basic', async () => {\n        const wrapper = simulate.render(id)\n        wrapper.attach(document.createElement('parent-wrapper'))\n        const comp = wrapper.querySelector('#gallery')\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        wrapper.setData({ show: true })\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        wrapper.setData({ current: 1 })\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        const deleteBtn = comp.querySelector('.weui-gallery__del')\n        deleteBtn.dispatchEvent('tap')\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n        expect(onDelete).toBeCalledTimes(1)\n\n        const imgWrap = comp.querySelector('.weui-gallery__img__wrp')\n        imgWrap.dispatchEvent('tap')\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n        expect(onDelete).toBeCalledTimes(1)\n    })\n})\n"
  },
  {
    "path": "src/components/gallery/gallery.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/gallery/gallery.less",
    "content": ".weui-gallery__opr {\n  padding-bottom: 0;\n}\n\n.weui-gallery__del {\n  padding-bottom: calc(16px + env(safe-area-inset-bottom));\n}\n\n.weui-gallery:focus {\n  outline: none;\n}\n\n.weui-gallery__info {\n  padding-top: env(safe-area-inset-top);\n}\n\n.weui-gallery__del {\n  height: 60px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n.weui-icon-delete.weui-icon_gallery-delete {\n  background-color: var(--weui-WHITE); /* skyline 不支持 currentColor */\n}"
  },
  {
    "path": "src/components/gallery/gallery.ts",
    "content": "Component({\n    properties: {\n        imgUrls: {\n            type: Array,\n            value: [],\n            observer(newVal) {\n                this.setData({ currentImgs: newVal })\n            }\n        },\n        showDelete: {\n            // 是否显示delete按钮\n            type: Boolean,\n            value: true\n        },\n        show: {\n            type: Boolean,\n            value: true,\n            observer: '_showChange'\n        },\n        current: {\n            type: Number,\n            value: 0\n        },\n        hideOnClick: {\n            type: Boolean,\n            value: true\n        },\n        extClass: {\n            type: String,\n            value: ''\n        },\n        rootPortal: {\n            // 是否使用 root-portal\n            type: Boolean,\n            value: false\n        }\n    },\n    data: {\n        wrapperShow: false,\n        innerShow: false,\n        currentImgs: []\n    },\n    ready() {\n        this._showChange(this.data.show)\n        const data: any = this.data\n        this.setData({ currentImgs: data.imgUrls })\n    },\n    methods: {\n        _showChange(show) {\n            if (show) {\n                this.setData({\n                    wrapperShow: true,\n                    innerShow: true\n                })\n            } else {\n                this.setData({ innerShow: false })\n                setTimeout(() => {\n                    this.setData({ wrapperShow: false })\n                }, 300)\n            }\n        },\n        change(e) {\n            this.setData({\n                current: e.detail.current\n            })\n            this.triggerEvent('change', { current: e.detail.current }, {})\n        },\n        deleteImg() {\n            const data: any = this.data\n            const imgs = data.currentImgs\n            const url = imgs.splice(data.current, 1)\n            this.triggerEvent('delete', { url: url[0], index: data.current }, {})\n            if (imgs.length === 0) {\n                // @ts-ignore\n                this.hideGallery()\n                return\n            }\n            this.setData({\n                current: 0,\n                currentImgs: imgs\n            })\n        },\n        hideGallery() {\n            const data: any = this.data\n            if (data.hideOnClick) {\n                this.setData({\n                    show: false\n                })\n                this.triggerEvent('hide', {}, {})\n            }\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/gallery/gallery.wxml",
    "content": "<template name=\"body\">\n  <view\n    class=\"weui-gallery {{innerShow ? 'weui-animate-fade-in' : 'weui-animate-fade-out'}} {{extClass}}\"\n    aria-modal=\"true\"\n    tabindex=\"0\"\n  >\n    <view class=\"weui-gallery__info\">{{current+1}}/{{currentImgs.length}}</view>\n    <swiper\n      class=\"weui-gallery__img__wrp\"\n      bindtap=\"hideGallery\"\n      indicator-dots=\"{{false}}\"\n      bindchange=\"change\"\n      current=\"{{current}}\"\n      autoplay=\"{{false}}\"\n      duration=\"{{500}}\"\n    >\n      <block wx:for=\"{{currentImgs}}\" wx:key=\"index\">\n        <swiper-item>\n          <image mode=\"aspectFit\" class=\"weui-gallery__img\" src=\"{{item}}\"></image>\n        </swiper-item>\n      </block>\n    </swiper>\n    <view class=\"weui-gallery__opr\" wx:if=\"{{showDelete}}\">\n      <view\n        aria-role=\"button\"\n        aria-label=\"删除\"\n        class=\"weui-gallery__del\"\n        bindtap=\"deleteImg\"\n        hover-class=\"weui-active\"\n      >\n          <view class=\"weui-icon-delete weui-icon_gallery-delete\"></view>\n      </view>\n    </view>\n  </view>\n</template>\n\n<root-portal enable=\"{{true}}\" wx:if=\"{{rootPortal && wrapperShow}}\">\n  <view class=\"root-portal-box\">\n    <template is=\"body\" data=\"{{showDelete, extClass, current, innerShow, currentImgs}}\" />\n  </view>\n</root-portal>\n<view wx:elif=\"{{!rootPortal && wrapperShow}}\">\n  <template is=\"body\" data=\"{{showDelete, extClass, current, innerShow, currentImgs}}\" />\n</view>\n"
  },
  {
    "path": "src/components/grids/__test__/__snapshots__/grid.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`grids basic 1`] = `\n<main>\n  <mp-grids>\n    <wx-view\n      class=\"weui-grids \"\n    >\n      <wx-view\n        appId=\"\"\n        class=\"weui-grid\"\n        data-url=\"/0\"\n        extraData=\"\"\n        hoverClass=\"navigator-hover\"\n        hoverStartTime=\"{{50}}\"\n        hoverStayTime=\"{{600}}\"\n        hoverStopPropagation=\"{{false}}\"\n        openType=\"navigate\"\n        path=\"\"\n        target=\"self\"\n        url=\"/0\"\n        version=\"release\"\n        bind:complete=\"\"\n        bind:fail=\"\"\n        bind:success=\"\"\n        bind:tap=\"openPage\"\n      >\n        <wx-view\n          class=\"weui-grid__icon\"\n        >\n          <wx-image\n            alt=\"{{true}}\"\n            class=\"weui-grid__icon_img\"\n            src=\"/img-0.png\"\n          />\n        </wx-view>\n        <wx-view\n          class=\"weui-grid__label\"\n        >\n          Grid0\n        </wx-view>\n      </wx-view>\n      <wx-view\n        appId=\"\"\n        class=\"weui-grid\"\n        data-url=\"/1\"\n        extraData=\"\"\n        hoverClass=\"navigator-hover\"\n        hoverStartTime=\"{{50}}\"\n        hoverStayTime=\"{{600}}\"\n        hoverStopPropagation=\"{{false}}\"\n        openType=\"navigate\"\n        path=\"\"\n        target=\"self\"\n        url=\"/1\"\n        version=\"release\"\n        bind:complete=\"\"\n        bind:fail=\"\"\n        bind:success=\"\"\n        bind:tap=\"openPage\"\n      >\n        <wx-view\n          class=\"weui-grid__icon\"\n        >\n          <wx-image\n            alt=\"{{true}}\"\n            class=\"weui-grid__icon_img\"\n            src=\"/img-1.png\"\n          />\n        </wx-view>\n        <wx-view\n          class=\"weui-grid__label\"\n        >\n          Grid1\n        </wx-view>\n      </wx-view>\n      <wx-view\n        appId=\"\"\n        class=\"weui-grid\"\n        data-url=\"/2\"\n        extraData=\"\"\n        hoverClass=\"navigator-hover\"\n        hoverStartTime=\"{{50}}\"\n        hoverStayTime=\"{{600}}\"\n        hoverStopPropagation=\"{{false}}\"\n        openType=\"navigate\"\n        path=\"\"\n        target=\"self\"\n        url=\"/2\"\n        version=\"release\"\n        bind:complete=\"\"\n        bind:fail=\"\"\n        bind:success=\"\"\n        bind:tap=\"openPage\"\n      >\n        <wx-view\n          class=\"weui-grid__icon\"\n        >\n          <wx-image\n            alt=\"{{true}}\"\n            class=\"weui-grid__icon_img\"\n            src=\"/img-2.png\"\n          />\n        </wx-view>\n        <wx-view\n          class=\"weui-grid__label\"\n        >\n          Grid2\n        </wx-view>\n      </wx-view>\n      <wx-view\n        appId=\"\"\n        class=\"weui-grid\"\n        data-url=\"/3\"\n        extraData=\"\"\n        hoverClass=\"navigator-hover\"\n        hoverStartTime=\"{{50}}\"\n        hoverStayTime=\"{{600}}\"\n        hoverStopPropagation=\"{{false}}\"\n        openType=\"navigate\"\n        path=\"\"\n        target=\"self\"\n        url=\"/3\"\n        version=\"release\"\n        bind:complete=\"\"\n        bind:fail=\"\"\n        bind:success=\"\"\n        bind:tap=\"openPage\"\n      >\n        <wx-view\n          class=\"weui-grid__icon\"\n        >\n          <wx-image\n            alt=\"{{true}}\"\n            class=\"weui-grid__icon_img\"\n            src=\"/img-3.png\"\n          />\n        </wx-view>\n        <wx-view\n          class=\"weui-grid__label\"\n        >\n          Grid3\n        </wx-view>\n      </wx-view>\n      <wx-view\n        appId=\"\"\n        class=\"weui-grid\"\n        data-url=\"/4\"\n        extraData=\"\"\n        hoverClass=\"navigator-hover\"\n        hoverStartTime=\"{{50}}\"\n        hoverStayTime=\"{{600}}\"\n        hoverStopPropagation=\"{{false}}\"\n        openType=\"navigate\"\n        path=\"\"\n        target=\"self\"\n        url=\"/4\"\n        version=\"release\"\n        bind:complete=\"\"\n        bind:fail=\"\"\n        bind:success=\"\"\n        bind:tap=\"openPage\"\n      >\n        <wx-view\n          class=\"weui-grid__icon\"\n        >\n          <wx-image\n            alt=\"{{true}}\"\n            class=\"weui-grid__icon_img\"\n            src=\"/img-4.png\"\n          />\n        </wx-view>\n        <wx-view\n          class=\"weui-grid__label\"\n        >\n          Grid4\n        </wx-view>\n      </wx-view>\n      <wx-view\n        appId=\"\"\n        class=\"weui-grid\"\n        data-url=\"/5\"\n        extraData=\"\"\n        hoverClass=\"navigator-hover\"\n        hoverStartTime=\"{{50}}\"\n        hoverStayTime=\"{{600}}\"\n        hoverStopPropagation=\"{{false}}\"\n        openType=\"navigate\"\n        path=\"\"\n        target=\"self\"\n        url=\"/5\"\n        version=\"release\"\n        bind:complete=\"\"\n        bind:fail=\"\"\n        bind:success=\"\"\n        bind:tap=\"openPage\"\n      >\n        <wx-view\n          class=\"weui-grid__icon\"\n        >\n          <wx-image\n            alt=\"{{true}}\"\n            class=\"weui-grid__icon_img\"\n            src=\"/img-5.png\"\n          />\n        </wx-view>\n        <wx-view\n          class=\"weui-grid__label\"\n        >\n          Grid5\n        </wx-view>\n      </wx-view>\n      <wx-view\n        appId=\"\"\n        class=\"weui-grid\"\n        data-url=\"/6\"\n        extraData=\"\"\n        hoverClass=\"navigator-hover\"\n        hoverStartTime=\"{{50}}\"\n        hoverStayTime=\"{{600}}\"\n        hoverStopPropagation=\"{{false}}\"\n        openType=\"navigate\"\n        path=\"\"\n        target=\"self\"\n        url=\"/6\"\n        version=\"release\"\n        bind:complete=\"\"\n        bind:fail=\"\"\n        bind:success=\"\"\n        bind:tap=\"openPage\"\n      >\n        <wx-view\n          class=\"weui-grid__icon\"\n        >\n          <wx-image\n            alt=\"{{true}}\"\n            class=\"weui-grid__icon_img\"\n            src=\"/img-6.png\"\n          />\n        </wx-view>\n        <wx-view\n          class=\"weui-grid__label\"\n        >\n          Grid6\n        </wx-view>\n      </wx-view>\n      <wx-view\n        appId=\"\"\n        class=\"weui-grid\"\n        data-url=\"/7\"\n        extraData=\"\"\n        hoverClass=\"navigator-hover\"\n        hoverStartTime=\"{{50}}\"\n        hoverStayTime=\"{{600}}\"\n        hoverStopPropagation=\"{{false}}\"\n        openType=\"navigate\"\n        path=\"\"\n        target=\"self\"\n        url=\"/7\"\n        version=\"release\"\n        bind:complete=\"\"\n        bind:fail=\"\"\n        bind:success=\"\"\n        bind:tap=\"openPage\"\n      >\n        <wx-view\n          class=\"weui-grid__icon\"\n        >\n          <wx-image\n            alt=\"{{true}}\"\n            class=\"weui-grid__icon_img\"\n            src=\"/img-7.png\"\n          />\n        </wx-view>\n        <wx-view\n          class=\"weui-grid__label\"\n        >\n          Grid7\n        </wx-view>\n      </wx-view>\n      <wx-view\n        appId=\"\"\n        class=\"weui-grid\"\n        data-url=\"/8\"\n        extraData=\"\"\n        hoverClass=\"navigator-hover\"\n        hoverStartTime=\"{{50}}\"\n        hoverStayTime=\"{{600}}\"\n        hoverStopPropagation=\"{{false}}\"\n        openType=\"navigate\"\n        path=\"\"\n        target=\"self\"\n        url=\"/8\"\n        version=\"release\"\n        bind:complete=\"\"\n        bind:fail=\"\"\n        bind:success=\"\"\n        bind:tap=\"openPage\"\n      >\n        <wx-view\n          class=\"weui-grid__icon\"\n        >\n          <wx-image\n            alt=\"{{true}}\"\n            class=\"weui-grid__icon_img\"\n            src=\"/img-8.png\"\n          />\n        </wx-view>\n        <wx-view\n          class=\"weui-grid__label\"\n        >\n          Grid8\n        </wx-view>\n      </wx-view>\n    </wx-view>\n  </mp-grids>\n</main>\n`;\n"
  },
  {
    "path": "src/components/grids/__test__/grid.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('grids', () => {\n    const grids = simulate.load(path.resolve(__dirname, '../grids'), 'mp-grids')\n\n    const id = simulate.load({\n        template: `\n            <mp-grids grids=\"{{grids}}\"></mp-grids>\n        `,\n        usingComponents: {\n            'mp-grids': grids\n        },\n        data: {\n            grids: Array(9)\n                .fill(null)\n                .map((_, i) => ({\n                    imgUrl: `/img-${i}.png`,\n                    url: `/${i}`,\n                    text: `Grid${i}`\n                }))\n        }\n    })\n\n    test('basic', async () => {\n        const comp = simulate.render(id)\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n})\n"
  },
  {
    "path": "src/components/grids/grids.json",
    "content": "{\n  \"component\": true,\n  \"styleIsolation\": \"apply-shared\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/grids/grids.less",
    "content": ".weui-grid .weui-grid__icon_img {\n  width: 100%;\n  height: 100%;\n}\n\n/** skyline 不支持 float: left */\n.weui-grids {\n    display: flex;\n    flex-direction: row;\n    flex-wrap: wrap;\n}\n\n/** skyline 不支持 float: left */\n.weui-grid {\n    float: none;\n}\n"
  },
  {
    "path": "src/components/grids/grids.ts",
    "content": "const defaultGridProps = {\n    target: 'self',\n    url: '',\n    openType: 'navigate',\n    delta: 1,\n    appId: '',\n    path: '',\n    extraData: '',\n    version: 'release',\n    hoverClass: 'navigator-hover',\n    hoverStopPropagation: false,\n    hoverStartTime: 50,\n    hoverStayTime: 600,\n    bindsuccess: () => {},\n    bindfail: () => {},\n    bindcomplete: () => {}\n}\n\nComponent({\n    options: {\n        pureDataPattern: /^_/\n    },\n    properties: {\n        extClass: {\n            type: String,\n            value: ''\n        },\n        grids: {\n            type: Array,\n            value: [],\n            observer: '_onGridsChange'\n        }\n    },\n    data: {\n        innerGrids: []\n    },\n    ready() {},\n    methods: {\n        _onGridsChange(grids): void {\n            if (grids) {\n                this.setData({\n                    innerGrids: grids.map((grid) => Object.assign({}, defaultGridProps, grid))\n                })\n            }\n        },\n        // navigator 改成 view，兼容\n        openPage(e) {\n            const url = e.currentTarget.dataset.url\n            wx.navigateTo({\n                url: url,\n                complete(res) {\n                    \n                }\n            })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/grids/grids.wxml",
    "content": "<view class=\"weui-grids {{extClass}}\">\n  <block wx:for=\"{{innerGrids}}\" wx:key=\"index\">\n    <!-- 把 navigator 改成 view，因为这里 navigator 现在的实现是 text，和 webview 在布局上有点不同 -->\n    <view\n      class=\"weui-grid\"\n      target=\"{{item.target}}\"\n      url=\"{{item.url}}\"\n      data-url=\"{{item.url}}\"\n      open-type=\"{{item.openType}}\"\n      app-id=\"{{item.appId}}\"\n      path=\"{{item.path}}\"\n      extra-data=\"{{item.extraData}}\"\n      version=\"{{item.version}}\"\n      hover-class=\"{{item.hoverClass}}\"\n      hover-stop-propagation=\"{{item.hoverStopPropagation}}\"\n      hover-start-time=\"{{item.hoverStartTime}}\"\n      hover-stay-time=\"{{item.hoverStayTime}}\"\n      bindsuccess=\"{{item.bindsuccess}}\"\n      bindfail=\"{{item.bindfail}}\"\n      bindcomplete=\"{{item.bindcomplete}}\"\n      bindtap=\"openPage\"\n    >\n      <view class=\"weui-grid__icon\">\n        <image class=\"weui-grid__icon_img\" src=\"{{item.imgUrl}}\" alt></image>\n      </view>\n      <view class=\"weui-grid__label\">{{item.text}}</view>\n    </view>\n  </block>\n</view>"
  },
  {
    "path": "src/components/half-screen-dialog/__test__/__snapshots__/half-screen-dialog.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`grids basic 1`] = `\n<mp-half-screen-dialog\n  id=\"dialog\"\n  bind:buttontap=\"onButtonTap\"\n  bind:close=\"onClose\"\n/>\n`;\n\nexports[`grids basic 2`] = `\n<mp-half-screen-dialog\n  id=\"dialog\"\n  bind:buttontap=\"onButtonTap\"\n  bind:close=\"onClose\"\n>\n  <wx-root-portal\n    enable=\"{{true}}\"\n  >\n    <wx-view\n      ariaModal=\"true\"\n      ariaRole=\"dialog\"\n      class=\"root-portal-box\"\n      style=\"z-index:901\"\n    >\n      <wx-view\n        class=\"weui-half-screen-dialog \"\n      >\n        <wx-view\n          class=\"weui-half-screen-dialog__hd\"\n        >\n          <wx-view\n            class=\"weui-half-screen-dialog__hd__side\"\n            data-type=\"close\"\n            bind:tap=\"close\"\n          >\n            <wx-view\n              ariaRole=\"button\"\n              class=\"weui-icon-btn\"\n              hoverClass=\"weui-active\"\n            >\n              关闭\n              <wx-view\n                class=\"weui-icon-close-thin\"\n              />\n            </wx-view>\n          </wx-view>\n          <wx-view\n            class=\"weui-half-screen-dialog__hd__main\"\n            tabindex=\"0\"\n          >\n            <wx-view\n              class=\"weui-half-screen-dialog__title\"\n            >\n              <wx-view\n                slot=\"title\"\n              >\n                测试标题A\n              </wx-view>\n            </wx-view>\n          </wx-view>\n          <wx-view\n            class=\"weui-half-screen-dialog__hd__side\"\n          >\n            <wx-view\n              class=\"weui-icon-btn weui-icon-btn_more\"\n              hoverClass=\"weui-active\"\n            >\n              更多\n            </wx-view>\n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"weui-half-screen-dialog__bd\"\n        >\n          <wx-view\n            slot=\"desc\"\n          >\n            这是自定义描述区\n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"weui-half-screen-dialog__ft\"\n        >\n          <wx-view\n            class=\"weui-half-screen-dialog__btn-area\"\n          >\n            <wx-button\n              ariaRole=\"button\"\n              class=\"weui-btn \"\n              data-index=\"{{0}}\"\n              type=\"default\"\n              bind:tap=\"buttonTap\"\n            >\n              按钮A\n            </wx-button>\n            <wx-button\n              ariaRole=\"button\"\n              class=\"weui-btn \"\n              data-index=\"{{1}}\"\n              type=\"primary\"\n              bind:tap=\"buttonTap\"\n            >\n              按钮B\n            </wx-button>\n          </wx-view>\n        </wx-view>\n      </wx-view>\n    </wx-view>\n    <wx-view\n      ariaLabel=\"蒙层\"\n      ariaRole=\"mask\"\n      class=\"weui-mask weui-animate-fade-in\"\n      data-type=\"close\"\n      style=\"z-index:900\"\n      bind:tap=\"close\"\n    />\n  </wx-root-portal>\n</mp-half-screen-dialog>\n`;\n"
  },
  {
    "path": "src/components/half-screen-dialog/__test__/half-screen-dialog.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('grids', () => {\n    const halfScreenDialog = simulate.load(\n        path.resolve(__dirname, '../half-screen-dialog'),\n        'mp-half-screen-dialog'\n    )\n\n    test('basic', async () => {\n        const onButtonTap = jest.fn()\n        const onClose = jest.fn()\n\n        const wrapper = simulate.render(\n            simulate.load({\n                usingComponents: {\n                    'mp-half-screen-dialog': halfScreenDialog\n                },\n                template: `\n                    <mp-half-screen-dialog id=\"dialog\" show=\"{{show}}\" buttons=\"{{buttons}}\" bindbuttontap=\"onButtonTap\" bindclose=\"onClose\">\n                        <view slot=\"title\">测试标题A</view>\n                        <view slot=\"desc\">这是自定义描述区</view>\n                    </mp-half-screen-dialog>\n                `,\n                data: {\n                    show: false,\n                    buttons: [\n                        {\n                            text: '按钮A',\n                            type: 'default'\n                        },\n                        {\n                            text: '按钮B',\n                            type: 'primary'\n                        }\n                    ]\n                },\n                methods: {\n                    onButtonTap,\n                    onClose\n                }\n            })\n        )\n        wrapper.attach(document.createElement('parent-wrapper'))\n        const comp = wrapper.querySelector('#dialog')\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        comp.setData({ show: true })\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        const buttons = comp.querySelectorAll('.weui-btn')\n        buttons[1].dispatchEvent('tap')\n        await simulate.sleep(0)\n        expect(onButtonTap).toBeCalledTimes(1)\n        expect(onButtonTap.mock.calls[0][0].detail).toStrictEqual({\n            index: 1,\n            item: {\n                text: '按钮B',\n                type: 'primary'\n            }\n        })\n\n        const mask = comp.querySelector('.weui-mask')\n        mask.dispatchEvent('tap')\n        await simulate.sleep(0)\n        expect(onClose).toBeCalledTimes(1)\n    })\n})\n"
  },
  {
    "path": "src/components/half-screen-dialog/half-screen-dialog.json",
    "content": "{\n  \"component\": true,\n  \"styleIsolation\": \"apply-shared\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/half-screen-dialog/half-screen-dialog.less",
    "content": ".weui-half-screen-dialog__hd__main:focus {\n    outline: none;\n}\n\n.weui-dialog__root {\n    position: absolute;\n    z-index: 1000;\n}\n\n// FIXME: skyline animation 暂有 scope 的 bug\n.weui-animate-fade-in {\n    animation: weuiFadeIn ease 0.3s forwards;\n}\n\n@keyframes weuiFadeIn {\n    from {\n        opacity: 0;\n    }\n    to {\n        opacity: 1;\n    }\n}\n\n.weui-animate-fade-out {\n    animation: weuiFadeOut ease 0.3s forwards;\n}\n\n@keyframes weuiFadeOut {\n    from {\n        opacity: 1;\n    }\n    to {\n        opacity: 0;\n    }\n}\n\n.weui-animate-slide-up {\n    animation: weuiSlideUp ease 0.3s forwards;\n}\n\n@keyframes weuiSlideUp {\n    from {\n        transform: translate3d(0, 100%, 0);\n    }\n    to {\n        transform: translateZ(0);\n    }\n}\n\n.weui-animate-slide-down {\n    animation: weuiSlideDown ease 0.3s forwards;\n}\n\n@keyframes weuiSlideDown {\n    from {\n        transform: translateZ(0);\n    }\n    to {\n        transform: translate3d(0, 100%, 0);\n    }\n}\n\n.weui-icon-close-thin {\n    background-color: var(--weui-FG-0); /* skyline 不支持 currentColor */\n}\n"
  },
  {
    "path": "src/components/half-screen-dialog/half-screen-dialog.ts",
    "content": "Component({\n    options: {\n        multipleSlots: true // 在组件定义时的选项中启用多slot支持\n    },\n    properties: {\n        closabled: {\n            // 是否具有关闭标签\n            type: Boolean,\n            value: true\n        },\n        title: {\n            // 标题，也可以通过 slot 自定义\n            type: String,\n            value: ''\n        },\n        subTitle: {\n            // 副标题，也可以通过 slot 自定义\n            type: String,\n            value: ''\n        },\n        extClass: {\n            // 弹窗 class\n            type: String,\n            value: ''\n        },\n        desc: {\n            type: String,\n            value: ''\n        },\n        tips: {\n            type: String,\n            value: ''\n        },\n        maskClosable: {\n            type: Boolean,\n            value: true\n        },\n        mask: {\n            // 是否需要 遮罩层\n            type: Boolean,\n            value: true\n        },\n        show: {\n            // 是否开启弹窗\n            type: Boolean,\n            value: false,\n            observer: '_showChange'\n        },\n        buttons: {\n            type: Array,\n            value: [] // {text, extClass}\n        },\n        rootPortal: {\n            // 是否使用 rootPortal\n            type: Boolean,\n            value: false\n        }\n    },\n    data: {\n        wrapperShow: false,\n        innerShow: false\n    },\n    lifetimes: {\n        ready() {\n            this._showChange(this.data.show)\n        }\n    },\n    methods: {\n        _showChange(show) {\n            if (show) {\n                this.setData({\n                    wrapperShow: true,\n                    innerShow: true\n                })\n            } else {\n                this.setData({ innerShow: false })\n                setTimeout(() => {\n                    this.setData({ wrapperShow: false })\n                }, 300)\n            }\n        },\n        close(e) {\n            const { type } = e.currentTarget.dataset\n            if (this.data.maskClosable || type === 'close') {\n                this.setData({\n                    show: false\n                })\n                // 关闭弹窗回调事件\n                this.triggerEvent('close')\n            }\n        },\n        buttonTap(e) {\n            const { index } = e.currentTarget.dataset\n            this.triggerEvent('buttontap', { index, item: this.data.buttons[index] }, {})\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/half-screen-dialog/half-screen-dialog.wxml",
    "content": "<template name=\"body\">\n  <wxs module=\"wxs\">\n    function onMaskTouchmove () {\n      return false\n    }\n    module.exports = {\n      onMaskTouchmove: onMaskTouchmove,\n    }\n  </wxs>\n  <view class=\"weui-half-screen-dialog {{innerShow ? 'weui-animate-slide-up' : 'weui-animate-slide-down' }} {{extClass}}\" mut-bind:touchmove=\"{{wxs.onMaskTouchmove}}\">\n    <view class=\"weui-half-screen-dialog__hd\">\n      <view wx:if=\"{{closabled}}\" class=\"weui-half-screen-dialog__hd__side\" bindtap=\"close\" data-type=\"close\">\n        <view class=\"weui-icon-btn\" aria-role=\"button\" hover-class=\"weui-active\">\n          关闭\n          <view class=\"weui-icon-close-thin\"></view>\n        </view>\n      </view>\n      <view class=\"weui-half-screen-dialog__hd__main\" tabindex=\"0\">\n        <block wx:if=\"{{title}}\">\n          <text class=\"weui-half-screen-dialog__title\">{{title}}</text>\n          <text class=\"weui-half-screen-dialog__subtitle\">{{subTitle}}</text>\n        </block>\n        <block wx:else>\n          <view class=\"weui-half-screen-dialog__title\">\n            <slot name=\"title\"></slot>\n          </view>\n        </block>\n      </view>\n      <view class=\"weui-half-screen-dialog__hd__side\">\n        <view class=\"weui-icon-btn weui-icon-btn_more\" hover-class=\"weui-active\">更多</view>\n      </view>\n    </view>\n    <view class=\"weui-half-screen-dialog__bd\">\n      <block wx:if=\"{{desc}}\">\n        <view class=\"weui-half-screen-dialog__desc\">{{desc}}</view>\n        <view class=\"weui-half-screen-dialog__tips\">{{tips}}</view>\n      </block>\n      <slot name=\"desc\" wx:else></slot>\n    </view>\n    <view class=\"weui-half-screen-dialog__ft\">\n      <view class=\"weui-half-screen-dialog__btn-area\" wx:if=\"{{buttons && buttons.length}}\">\n        <button wx:for=\"{{buttons}}\" wx:key=\"index\" type=\"{{item.type}}\" class=\"weui-btn {{item.className}}\" data-index=\"{{index}}\" bindtap=\"buttonTap\" aria-role=\"button\">\n          {{item.text}}\n        </button>\n      </view>\n      <slot name=\"footer\" wx:else></slot>\n    </view>\n  </view>\n  <view\n    wx:if=\"{{mask}}\"\n    class=\"weui-mask {{maskClass}} {{innerShow ? 'weui-animate-fade-in' : 'weui-animate-fade-out' }}\"\n    bindtap=\"close\"\n    data-type=\"mask\"\n    catch:touchmove=\"onMaskMouseMove\"\n    aria-role=\"button\"\n    aria-label=\"关闭\"\n  ></view>\n</template>\n\n<root-portal enable=\"{{true}}\" wx:if=\"{{rootPortal && wrapperShow}}\">\n  <view aria-role=\"dialog\" aria-modal=\"true\" class=\"root-portal-box weui-dialog__root\">\n    <template is=\"body\" data=\"{{closabled, maskClass, extClass, title, subTitle, desc, tips, mask, show, buttons, innerShow}}\"></template>\n  </view>\n</root-portal>\n<view wx:elif=\"{{!rootPortal && wrapperShow}}\" aria-role=\"dialog\" aria-modal=\"true\">\n  <template is=\"body\" data=\"{{closabled, maskClass, extClass, title, subTitle, desc, tips, mask, show, buttons, innerShow}}\"></template>\n</view>\n"
  },
  {
    "path": "src/components/icon/__test__/__snapshots__/icon.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`grids basic 1`] = `\n<main>\n  <wx-view\n    class=\" weui-icon\"\n    style=\"background:#000000;width:20px;height:20px;mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL091dGxpbmVkL2FkZDwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9PdXRsaW5lZC9hZGQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJJY29ucy9UaW50LUNvbG9yL0JsYWNrIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjAwMDAwMCwgMy4wMDAwMDApIiBmaWxsPSIjMDAwMDAwIj4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yNSw4LjI1IEw4LjI1LDAuNSBMOS43NSwwLjUgTDkuNzUsOC4yNSBMMTcuNSw4LjI1IEwxNy41LDkuNzUgTDkuNzUsOS43NSBMOS43NSwxNy41IEw4LjI1LDE3LjUgTDguMjUsOS43NSBMMC41LDkuNzUgTDAuNSw4LjI1IEw4LjI1LDguMjUgWiIgaWQ9IuWbvuagh+minOiJsiI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+);-webkit-mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL091dGxpbmVkL2FkZDwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9PdXRsaW5lZC9hZGQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJJY29ucy9UaW50LUNvbG9yL0JsYWNrIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjAwMDAwMCwgMy4wMDAwMDApIiBmaWxsPSIjMDAwMDAwIj4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yNSw4LjI1IEw4LjI1LDAuNSBMOS43NSwwLjUgTDkuNzUsOC4yNSBMMTcuNSw4LjI1IEwxNy41LDkuNzUgTDkuNzUsOS43NSBMOS43NSwxNy41IEw4LjI1LDE3LjUgTDguMjUsOS43NSBMMC41LDkuNzUgTDAuNSw4LjI1IEw4LjI1LDguMjUgWiIgaWQ9IuWbvuagh+minOiJsiI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+);-moz-mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL091dGxpbmVkL2FkZDwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9PdXRsaW5lZC9hZGQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJJY29ucy9UaW50LUNvbG9yL0JsYWNrIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjAwMDAwMCwgMy4wMDAwMDApIiBmaWxsPSIjMDAwMDAwIj4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yNSw4LjI1IEw4LjI1LDAuNSBMOS43NSwwLjUgTDkuNzUsOC4yNSBMMTcuNSw4LjI1IEwxNy41LDkuNzUgTDkuNzUsOS43NSBMOS43NSwxNy41IEw4LjI1LDE3LjUgTDguMjUsOS43NSBMMC41LDkuNzUgTDAuNSw4LjI1IEw4LjI1LDguMjUgWiIgaWQ9IuWbvuagh+minOiJsiI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+)\"\n  />\n</main>\n`;\n\nexports[`grids basic 2`] = `\n<main>\n  <wx-view\n    class=\" weui-icon\"\n    style=\"background:#000000;width:20px;height:20px;mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL0ZpbGxlZC9hbGJ1bTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9GaWxsZWQvYWxidW0iIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJjb21tb25faWNvbnNfYWxidW0iIGZpbGw9IiMwMDAwMDAiPiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC41LDE0LjEzNjA1ODIgTDIwLjUsNS41IEwzLjUsNS41IEwzLjUsMTMuODQ5NjA1NiBMOC4xOTkyNDU1MywxMC4wNDkyNTg2IEM4LjY2MTc5OTA0LDkuNjc1MTg1MDEgOS40MDQ2MjU2Miw5LjY5MzMyNzE4IDkuODUwNDk1NDIsMTAuMDg1MDgzNyBMMTQuMzI2OTIyOSwxNC4wMTgyMjY0IEwxNi42MDkxMDI1LDEyLjA3NzQ5NzcgQzE3LjA3MTMxNzUsMTEuNjg0NDM3NiAxNy44MDY3MjI5LDExLjY5MjQyMjYgMTguMjU1NDMxNCwxMi4wOTUwODM3IEwyMC41LDE0LjEzNjA1ODIgWiBNMi45OTE4MDMxMSw0IEwyMS4wMDgxOTY5LDQgQzIxLjU0NDY5NDQsNCAyMiw0LjQ4MTEzNyAyMiw1LjA3NDY0OTU3IEwyMiwxOC45MjUzNTA0IEMyMiwxOS41MjExNTE4IDIxLjU1NTk1NDYsMjAgMjEuMDA4MTk2OSwyMCBMMi45OTE4MDMxMSwyMCBDMi40NTUzMDU1OCwyMCAyLDE5LjUxODg2MyAyLDE4LjkyNTM1MDQgTDIsNS4wNzQ2NDk1NyBDMiw0LjQ3ODg0ODIyIDIuNDQ0MDQ1MzgsNCAyLjk5MTgwMzExLDQgWiIgaWQ9IuWbvuagh+minOiJsiI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+);-webkit-mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL0ZpbGxlZC9hbGJ1bTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9GaWxsZWQvYWxidW0iIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJjb21tb25faWNvbnNfYWxidW0iIGZpbGw9IiMwMDAwMDAiPiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC41LDE0LjEzNjA1ODIgTDIwLjUsNS41IEwzLjUsNS41IEwzLjUsMTMuODQ5NjA1NiBMOC4xOTkyNDU1MywxMC4wNDkyNTg2IEM4LjY2MTc5OTA0LDkuNjc1MTg1MDEgOS40MDQ2MjU2Miw5LjY5MzMyNzE4IDkuODUwNDk1NDIsMTAuMDg1MDgzNyBMMTQuMzI2OTIyOSwxNC4wMTgyMjY0IEwxNi42MDkxMDI1LDEyLjA3NzQ5NzcgQzE3LjA3MTMxNzUsMTEuNjg0NDM3NiAxNy44MDY3MjI5LDExLjY5MjQyMjYgMTguMjU1NDMxNCwxMi4wOTUwODM3IEwyMC41LDE0LjEzNjA1ODIgWiBNMi45OTE4MDMxMSw0IEwyMS4wMDgxOTY5LDQgQzIxLjU0NDY5NDQsNCAyMiw0LjQ4MTEzNyAyMiw1LjA3NDY0OTU3IEwyMiwxOC45MjUzNTA0IEMyMiwxOS41MjExNTE4IDIxLjU1NTk1NDYsMjAgMjEuMDA4MTk2OSwyMCBMMi45OTE4MDMxMSwyMCBDMi40NTUzMDU1OCwyMCAyLDE5LjUxODg2MyAyLDE4LjkyNTM1MDQgTDIsNS4wNzQ2NDk1NyBDMiw0LjQ3ODg0ODIyIDIuNDQ0MDQ1MzgsNCAyLjk5MTgwMzExLDQgWiIgaWQ9IuWbvuagh+minOiJsiI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+);-moz-mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL0ZpbGxlZC9hbGJ1bTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9GaWxsZWQvYWxidW0iIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJjb21tb25faWNvbnNfYWxidW0iIGZpbGw9IiMwMDAwMDAiPiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC41LDE0LjEzNjA1ODIgTDIwLjUsNS41IEwzLjUsNS41IEwzLjUsMTMuODQ5NjA1NiBMOC4xOTkyNDU1MywxMC4wNDkyNTg2IEM4LjY2MTc5OTA0LDkuNjc1MTg1MDEgOS40MDQ2MjU2Miw5LjY5MzMyNzE4IDkuODUwNDk1NDIsMTAuMDg1MDgzNyBMMTQuMzI2OTIyOSwxNC4wMTgyMjY0IEwxNi42MDkxMDI1LDEyLjA3NzQ5NzcgQzE3LjA3MTMxNzUsMTEuNjg0NDM3NiAxNy44MDY3MjI5LDExLjY5MjQyMjYgMTguMjU1NDMxNCwxMi4wOTUwODM3IEwyMC41LDE0LjEzNjA1ODIgWiBNMi45OTE4MDMxMSw0IEwyMS4wMDgxOTY5LDQgQzIxLjU0NDY5NDQsNCAyMiw0LjQ4MTEzNyAyMiw1LjA3NDY0OTU3IEwyMiwxOC45MjUzNTA0IEMyMiwxOS41MjExNTE4IDIxLjU1NTk1NDYsMjAgMjEuMDA4MTk2OSwyMCBMMi45OTE4MDMxMSwyMCBDMi40NTUzMDU1OCwyMCAyLDE5LjUxODg2MyAyLDE4LjkyNTM1MDQgTDIsNS4wNzQ2NDk1NyBDMiw0LjQ3ODg0ODIyIDIuNDQ0MDQ1MzgsNCAyLjk5MTgwMzExLDQgWiIgaWQ9IuWbvuagh+minOiJsiI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+)\"\n  />\n</main>\n`;\n\nexports[`grids basic 3`] = `\n<main>\n  <wx-view\n    class=\" weui-icon\"\n    style=\"background:#000000;width:20px;height:20px;mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL091dGxpbmVkL2NlbGxwaG9uZTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9PdXRsaW5lZC9jZWxscGhvbmUiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS4wMDAwMDAsIDIuMDAwMDAwKSIgZmlsbD0iIzAwMDAwMCI+ICAgICAgICAgICAgPHBhdGggZD0iTTAsMSBDMCwwLjQ0NzcxNTI1IDAuNDQ3NzE1MjUsMCAxLDAgTDEzLDAgQzEzLjU1MjI4NDcsMCAxNCwwLjQ0NzcxNTI1IDE0LDEgTDE0LDE5IEMxNCwxOS41NTIyODQ3IDEzLjU1MjI4NDcsMjAgMTMsMjAgTDEsMjAgQzAuNDQ3NzE1MjUsMjAgMCwxOS41NTIyODQ3IDAsMTkgTDAsMSBaIE0xLjIsMS4yIEwxLjIsMTguOCBMMTIuOCwxOC44IEwxMi44LDEuMiBMMS4yLDEuMiBaIE03LDE4IEM2LjQ0NzcxNTI1LDE4IDYsMTcuNTUyMjg0NyA2LDE3IEM2LDE2LjQ0NzcxNTMgNi40NDc3MTUyNSwxNiA3LDE2IEM3LjU1MjI4NDc1LDE2IDgsMTYuNDQ3NzE1MyA4LDE3IEM4LDE3LjU1MjI4NDcgNy41NTIyODQ3NSwxOCA3LDE4IFoiIGlkPSLlm77moIfpopzoibIiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==);-webkit-mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL091dGxpbmVkL2NlbGxwaG9uZTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9PdXRsaW5lZC9jZWxscGhvbmUiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS4wMDAwMDAsIDIuMDAwMDAwKSIgZmlsbD0iIzAwMDAwMCI+ICAgICAgICAgICAgPHBhdGggZD0iTTAsMSBDMCwwLjQ0NzcxNTI1IDAuNDQ3NzE1MjUsMCAxLDAgTDEzLDAgQzEzLjU1MjI4NDcsMCAxNCwwLjQ0NzcxNTI1IDE0LDEgTDE0LDE5IEMxNCwxOS41NTIyODQ3IDEzLjU1MjI4NDcsMjAgMTMsMjAgTDEsMjAgQzAuNDQ3NzE1MjUsMjAgMCwxOS41NTIyODQ3IDAsMTkgTDAsMSBaIE0xLjIsMS4yIEwxLjIsMTguOCBMMTIuOCwxOC44IEwxMi44LDEuMiBMMS4yLDEuMiBaIE03LDE4IEM2LjQ0NzcxNTI1LDE4IDYsMTcuNTUyMjg0NyA2LDE3IEM2LDE2LjQ0NzcxNTMgNi40NDc3MTUyNSwxNiA3LDE2IEM3LjU1MjI4NDc1LDE2IDgsMTYuNDQ3NzE1MyA4LDE3IEM4LDE3LjU1MjI4NDcgNy41NTIyODQ3NSwxOCA3LDE4IFoiIGlkPSLlm77moIfpopzoibIiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==);-moz-mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL091dGxpbmVkL2NlbGxwaG9uZTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9PdXRsaW5lZC9jZWxscGhvbmUiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS4wMDAwMDAsIDIuMDAwMDAwKSIgZmlsbD0iIzAwMDAwMCI+ICAgICAgICAgICAgPHBhdGggZD0iTTAsMSBDMCwwLjQ0NzcxNTI1IDAuNDQ3NzE1MjUsMCAxLDAgTDEzLDAgQzEzLjU1MjI4NDcsMCAxNCwwLjQ0NzcxNTI1IDE0LDEgTDE0LDE5IEMxNCwxOS41NTIyODQ3IDEzLjU1MjI4NDcsMjAgMTMsMjAgTDEsMjAgQzAuNDQ3NzE1MjUsMjAgMCwxOS41NTIyODQ3IDAsMTkgTDAsMSBaIE0xLjIsMS4yIEwxLjIsMTguOCBMMTIuOCwxOC44IEwxMi44LDEuMiBMMS4yLDEuMiBaIE03LDE4IEM2LjQ0NzcxNTI1LDE4IDYsMTcuNTUyMjg0NyA2LDE3IEM2LDE2LjQ0NzcxNTMgNi40NDc3MTUyNSwxNiA3LDE2IEM3LjU1MjI4NDc1LDE2IDgsMTYuNDQ3NzE1MyA4LDE3IEM4LDE3LjU1MjI4NDcgNy41NTIyODQ3NSwxOCA3LDE4IFoiIGlkPSLlm77moIfpopzoibIiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==)\"\n  />\n</main>\n`;\n\nexports[`grids basic 4`] = `\n<main>\n  <wx-view\n    class=\" weui-icon\"\n    style=\"background:rgba(255, 255, 255, .8);width:20px;height:20px;mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL091dGxpbmVkL2NlbGxwaG9uZTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9PdXRsaW5lZC9jZWxscGhvbmUiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS4wMDAwMDAsIDIuMDAwMDAwKSIgZmlsbD0iIzAwMDAwMCI+ICAgICAgICAgICAgPHBhdGggZD0iTTAsMSBDMCwwLjQ0NzcxNTI1IDAuNDQ3NzE1MjUsMCAxLDAgTDEzLDAgQzEzLjU1MjI4NDcsMCAxNCwwLjQ0NzcxNTI1IDE0LDEgTDE0LDE5IEMxNCwxOS41NTIyODQ3IDEzLjU1MjI4NDcsMjAgMTMsMjAgTDEsMjAgQzAuNDQ3NzE1MjUsMjAgMCwxOS41NTIyODQ3IDAsMTkgTDAsMSBaIE0xLjIsMS4yIEwxLjIsMTguOCBMMTIuOCwxOC44IEwxMi44LDEuMiBMMS4yLDEuMiBaIE03LDE4IEM2LjQ0NzcxNTI1LDE4IDYsMTcuNTUyMjg0NyA2LDE3IEM2LDE2LjQ0NzcxNTMgNi40NDc3MTUyNSwxNiA3LDE2IEM3LjU1MjI4NDc1LDE2IDgsMTYuNDQ3NzE1MyA4LDE3IEM4LDE3LjU1MjI4NDcgNy41NTIyODQ3NSwxOCA3LDE4IFoiIGlkPSLlm77moIfpopzoibIiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==);-webkit-mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL091dGxpbmVkL2NlbGxwaG9uZTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9PdXRsaW5lZC9jZWxscGhvbmUiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS4wMDAwMDAsIDIuMDAwMDAwKSIgZmlsbD0iIzAwMDAwMCI+ICAgICAgICAgICAgPHBhdGggZD0iTTAsMSBDMCwwLjQ0NzcxNTI1IDAuNDQ3NzE1MjUsMCAxLDAgTDEzLDAgQzEzLjU1MjI4NDcsMCAxNCwwLjQ0NzcxNTI1IDE0LDEgTDE0LDE5IEMxNCwxOS41NTIyODQ3IDEzLjU1MjI4NDcsMjAgMTMsMjAgTDEsMjAgQzAuNDQ3NzE1MjUsMjAgMCwxOS41NTIyODQ3IDAsMTkgTDAsMSBaIE0xLjIsMS4yIEwxLjIsMTguOCBMMTIuOCwxOC44IEwxMi44LDEuMiBMMS4yLDEuMiBaIE03LDE4IEM2LjQ0NzcxNTI1LDE4IDYsMTcuNTUyMjg0NyA2LDE3IEM2LDE2LjQ0NzcxNTMgNi40NDc3MTUyNSwxNiA3LDE2IEM3LjU1MjI4NDc1LDE2IDgsMTYuNDQ3NzE1MyA4LDE3IEM4LDE3LjU1MjI4NDcgNy41NTIyODQ3NSwxOCA3LDE4IFoiIGlkPSLlm77moIfpopzoibIiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==);-moz-mask-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT4zLkljb25zL091dGxpbmVkL2NlbGxwaG9uZTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZyBpZD0iMy5JY29ucy9PdXRsaW5lZC9jZWxscGhvbmUiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtb3BhY2l0eT0iMC45Ij4gICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS4wMDAwMDAsIDIuMDAwMDAwKSIgZmlsbD0iIzAwMDAwMCI+ICAgICAgICAgICAgPHBhdGggZD0iTTAsMSBDMCwwLjQ0NzcxNTI1IDAuNDQ3NzE1MjUsMCAxLDAgTDEzLDAgQzEzLjU1MjI4NDcsMCAxNCwwLjQ0NzcxNTI1IDE0LDEgTDE0LDE5IEMxNCwxOS41NTIyODQ3IDEzLjU1MjI4NDcsMjAgMTMsMjAgTDEsMjAgQzAuNDQ3NzE1MjUsMjAgMCwxOS41NTIyODQ3IDAsMTkgTDAsMSBaIE0xLjIsMS4yIEwxLjIsMTguOCBMMTIuOCwxOC44IEwxMi44LDEuMiBMMS4yLDEuMiBaIE03LDE4IEM2LjQ0NzcxNTI1LDE4IDYsMTcuNTUyMjg0NyA2LDE3IEM2LDE2LjQ0NzcxNTMgNi40NDc3MTUyNSwxNiA3LDE2IEM3LjU1MjI4NDc1LDE2IDgsMTYuNDQ3NzE1MyA4LDE3IEM4LDE3LjU1MjI4NDcgNy41NTIyODQ3NSwxOCA3LDE4IFoiIGlkPSLlm77moIfpopzoibIiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==)\"\n  />\n</main>\n`;\n"
  },
  {
    "path": "src/components/icon/__test__/icon.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('grids', () => {\n    const icon = simulate.load(path.resolve(__dirname, '../icon'))\n\n    async function testIcon(options: {\n        type?: string\n        icon: string\n        size?: number\n        color?: string\n    }): Promise<void> {\n        const iconComp = simulate.render(icon, options)\n        iconComp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(iconComp.toJSON()).toMatchSnapshot()\n    }\n\n    test('basic', async () => {\n        await testIcon({ icon: 'add' })\n        await testIcon({ type: 'filled', icon: 'album' })\n        await testIcon({ size: 20, icon: 'cellphone' })\n        await testIcon({ color: 'rgba(255, 255, 255, .8)', icon: 'cellphone' })\n    })\n})\n"
  },
  {
    "path": "src/components/icon/base64.ts",
    "content": "/* eslint-disable */\nvar b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar cb_encode = function(ccc) {\n    var padlen = [0, 2, 1][ccc.length % 3],\n    ord = ccc.charCodeAt(0) << 16\n        | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)\n        | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),\n    chars = [\n        b64chars.charAt( ord >>> 18),\n        b64chars.charAt((ord >>> 12) & 63),\n        padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n        padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n    ];\n    return chars.join('');\n};\n// @ts-ignore\nvar btoa = global.btoa ? function(b) {\n    // @ts-ignore\n    return global.btoa(b);\n} : function(b) {\n    return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n};\nvar fromCharCode = String.fromCharCode;\nvar cb_utob = function(c) {\n    var cc\n    if (c.length < 2) {\n        cc = c.charCodeAt(0);\n        return cc < 0x80 ? c\n            : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))\n                            + fromCharCode(0x80 | (cc & 0x3f)))\n            : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))\n                + fromCharCode(0x80 | ((cc >>>  6) & 0x3f))\n                + fromCharCode(0x80 | ( cc         & 0x3f)));\n    } else {\n        cc = 0x10000\n            + (c.charCodeAt(0) - 0xD800) * 0x400\n            + (c.charCodeAt(1) - 0xDC00);\n        return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))\n                + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))\n                + fromCharCode(0x80 | ((cc >>>  6) & 0x3f))\n                + fromCharCode(0x80 | ( cc         & 0x3f)));\n    }\n};\nvar re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\nvar utob = function(u) {\n    return u.replace(re_utob, cb_utob);\n};\nvar _encode = function(u) {\n    const isUint8Array = Object.prototype.toString.call(u) === '[object Uint8Array]';\n    return isUint8Array ? u.toString('base64')\n        : btoa(utob(String(u)));\n}\nvar encode = function(u, urisafe = false) {\n    return !urisafe\n        ? _encode(u)\n        : _encode(String(u)).replace(/[+\\/]/g, function(m0) {\n            return m0 == '+' ? '-' : '_';\n        }).replace(/=/g, '');\n};\nexport default {\n    encode\n}"
  },
  {
    "path": "src/components/icon/icon.json",
    "content": "{\n  \"component\": true,\n  \"styleIsolation\": \"apply-shared\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/icon/icon.less",
    "content": ".weui-icon {\n  vertical-align: middle;\n  display: inline-block;\n  background: black;\n  mask-repeat: no-repeat;\n  -webkit-mask-repeat: no-repeat;\n  -moz-mask-repeat: no-repeat;\n  mask-size: cover;\n  -webkit-mask-size: cover;\n  -moz-mask-size: cover;\n}\n// .weui-icon {\n//   display: inline-block;\n// }"
  },
  {
    "path": "src/components/icon/icon.ts",
    "content": "import Base64 from './base64'\nimport iconData from './icondata'\n\nconst getFixedIconType = function (type: string): string {\n    // 兼容旧版本 typo\n    return type === 'field' ? 'filled' : type\n}\n\nComponent({\n    properties: {\n        extClass: {\n            type: String,\n            value: ''\n        },\n        type: {\n            type: String,\n            value: 'outline',\n            observer: '_genSrcByType'\n        },\n        icon: {\n            type: String,\n            value: '',\n            observer: '_genSrcByIcon'\n        },\n        size: {\n            type: Number,\n            value: 20\n        },\n        color: {\n            type: String,\n            value: '#000000'\n        }\n    },\n    data: {\n        src: '',\n        height: 20,\n        width: 20\n    },\n    methods: {\n        _genSrcByIcon(v) {\n            this._genSrc(iconData[v][getFixedIconType(this.data.type)])\n        },\n        _genSrcByType(v) {\n            const iconDataItem = iconData[this.data.icon]\n            if (iconDataItem) this._genSrc(iconDataItem[getFixedIconType(v)])\n        },\n        _genSrc(rawData) {\n            if (!rawData) return // type 不存在\n            const base64 = Base64.encode(rawData)\n            this.setData({\n                src: 'data:image/svg+xml;base64,' + base64\n            })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/icon/icon.wxml",
    "content": "<wxs module=\"utils\">\n    var double = function(a) {\n        return 2*a\n    };\n    var ifSpecialIcon = function(v) {\n      return v === 'arrow' || v === 'back'\n    }\n    module.exports = {\n      double: double,\n      ifSpecialIcon: ifSpecialIcon\n    }\n</wxs>\n\n<view class=\"{{extClass}} weui-icon\" style=\"background:{{color}};width:{{size}}px;height:{{ utils.ifSpecialIcon(icon) ? utils.double(size) : size}}px;mask-image:url({{src}});-webkit-mask-image:url({{src}});-moz-mask-image:url({{src}})\"></view>\n"
  },
  {
    "path": "src/components/icon/icondata.ts",
    "content": "/* eslint-disable */\nexport default {\n    \"add-friends\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><title>3.Icons/Outlined/add-friends</title><desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/add-friends\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon13\" transform=\"translate(1.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M6.83191269,9.35013798 C6.09631763,8.47828515 5.5,6.84949648 5.5,5.70929053 L5.5,3.99958038 C5.5,1.79067313 7.29535615,0 9.5,0 C11.709139,0 13.5,1.79298022 13.5,4.00020747 L13.5,5.71018568 C13.5,6.84929595 12.9009324,8.48286035 12.1680872,9.35157303 L11.8065546,9.78013273 C11.2170324,10.4789507 11.4011877,11.3683976 12.225549,11.7705104 L17.8859024,14.5315576 C18.5012015,14.8316925 19,15.6251701 19,16.3154633 L19,17.0015619 C19,17.552984 18.5490746,18 17.9985704,18 L1.00142961,18 C0.448355308,18 0,17.5557555 0,17.0015619 L0,16.3154633 C0,15.6303744 0.498150907,14.8319079 1.11409761,14.5313327 L6.77445076,11.769143 C7.59537712,11.36854 7.78625906,10.4812624 7.19344522,9.7786389 L6.83191269,9.35013798 Z M1.2,16.8 L17.8,16.8 L17.8,16.3154633 C17.8,16.0860594 17.564679,15.7100199 17.3598095,15.6100873 L11.6994561,12.8490401 C10.1728743,12.1043932 9.79557277,10.302913 10.8893366,9.00636847 L11.2508692,8.57780877 C11.802195,7.92426863 12.3,6.56439093 12.3,5.71018568 L12.3,4.00020747 C12.3,2.4549142 11.0455898,1.2 9.5,1.2 C7.95630885,1.2 6.7,2.4552027 6.7,3.99958038 L6.7,5.70929053 C6.7,6.56566389 7.19574673,7.92048381 7.74907842,8.57631176 L8.11061095,9.00481267 C9.20663642,10.3038601 8.82521432,12.1036503 7.30071945,12.8475869 L1.6403663,15.6097766 C1.43701709,15.7090088 1.2,16.0886771 1.2,16.3154633 L1.2,16.8 Z M17.8999939,7.8999939 L17.8999939,5 L19.0999939,5 L19.0999939,7.8999939 L22,7.8999939 L22,9.09999394 L19.0999939,9.09999394 L19.0999939,12 L17.8999939,12 L17.8999939,9.09999394 L15,9.09999394 L15,7.8999939 L17.8999939,7.8999939 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/add-friends</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/add-friends\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon13\" fill=\"#000000\">            <path d=\"M18.7499939,10.75 L18.7499939,8 L20.2499939,8 L20.2499939,10.75 L23,10.75 L23,12.25 L20.2499939,12.25 L20.2499939,15 L18.7499939,15 L18.7499939,12.25 L16,12.25 L16,11.5 L16,10.75 L18.7499939,10.75 Z M7.83191269,12.350138 C7.09631763,11.4782852 6.5,9.84949648 6.5,8.70929053 L6.5,6.99958038 C6.5,4.79067313 8.29535615,3 10.5,3 C12.709139,3 14.5,4.79298022 14.5,7.00020747 L14.5,8.71018568 C14.5,9.84929595 13.9009324,11.4828603 13.1680872,12.351573 L12.8065546,12.7801327 C12.2170324,13.4789507 12.4011877,14.3683976 13.225549,14.7705104 L18.8859024,17.5315576 C19.5012015,17.8316925 20,18.6251701 20,19.3154633 L20,20.0015619 C20,20.552984 19.5490746,21 18.9985704,21 L2.00142961,21 C1.44835531,21 1,20.5557555 1,20.0015619 L1,19.3154633 C1,18.6303744 1.49815091,17.8319079 2.11409761,17.5313327 L7.77445076,14.769143 C8.59537712,14.36854 8.78625906,13.4812624 8.19344522,12.7786389 L7.83191269,12.350138 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"add\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/add</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/add\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M8.25,8.25 L8.25,0.5 L9.75,0.5 L9.75,8.25 L17.5,8.25 L17.5,9.75 L9.75,9.75 L9.75,17.5 L8.25,17.5 L8.25,9.75 L0.5,9.75 L0.5,8.25 L8.25,8.25 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/add</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/add\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_add\" transform=\"translate(4.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M7,7 L7,0 L9,0 L9,7 L16,7 L16,9 L9,9 L9,16 L7,16 L7,9 L0,9 L0,7 L7,7 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"add2\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/add2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/add2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M9.3999939,9.3999939 L9.3999939,5 L10.5999939,5 L10.5999939,9.3999939 L15,9.3999939 L15,10.5999939 L10.5999939,10.5999939 L10.5999939,15 L9.3999939,15 L9.3999939,10.5999939 L5,10.5999939 L5,9.3999939 L9.3999939,9.3999939 Z M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/add2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/add2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon21\" fill=\"#000000\">            <path d=\"M11.25,11.25 L7,11.25 L7,12.75 L11.25,12.75 L11.25,17 L12.75,17 L12.75,12.75 L17,12.75 L17,11.25 L12.75,11.25 L12.75,7 L11.25,7 L11.25,11.25 Z M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"album\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/album</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/album\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_album\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M18.8,10.4088466 L18.8,1.2 L1.2,1.2 L1.2,10.0922199 L6.19924553,6.04925865 C6.66179904,5.67518501 7.40462562,5.69332718 7.85049542,6.08508368 L12.3269229,10.0182264 L14.6091025,8.07749766 C15.0713175,7.68443756 15.8067229,7.69242258 16.2554314,8.0950837 L18.8,10.4088466 Z M18.7999996,11.9936093 L15.4261838,8.95789191 L13.2379757,10.8187086 L14.5824388,12 L12.8111672,12 L7.00605625,6.94008323 L1.2,11.6355239 L1.2,14.8 L18.8,14.8 L18.8,11.9936092 Z M0.99180311,0 L19.0081969,0 C19.5446944,0 20,0.481137002 20,1.07464957 L20,14.9253504 C20,15.5211518 19.5559546,16 19.0081969,16 L0.99180311,16 C0.455305576,16 0,15.518863 0,14.9253504 L0,1.07464957 C0,0.478848219 0.444045377,0 0.99180311,0 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/album</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/album\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_album\" fill=\"#000000\">            <path d=\"M20.5,14.1360582 L20.5,5.5 L3.5,5.5 L3.5,13.8496056 L8.19924553,10.0492586 C8.66179904,9.67518501 9.40462562,9.69332718 9.85049542,10.0850837 L14.3269229,14.0182264 L16.6091025,12.0774977 C17.0713175,11.6844376 17.8067229,11.6924226 18.2554314,12.0950837 L20.5,14.1360582 Z M2.99180311,4 L21.0081969,4 C21.5446944,4 22,4.481137 22,5.07464957 L22,18.9253504 C22,19.5211518 21.5559546,20 21.0081969,20 L2.99180311,20 C2.45530558,20 2,19.518863 2,18.9253504 L2,5.07464957 C2,4.47884822 2.44404538,4 2.99180311,4 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"arrow\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"12px\" height=\"24px\" viewBox=\"0 0 12 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/arrow</title>    <desc>Created with Sketch.</desc>    <defs>        <path d=\"M7.58750873,12.4298916 L6.52684856,13.4905518 L0.747951526,7.71165473 C0.357826227,7.32152943 0.354365786,6.69247179 0.747951526,6.29888605 L6.52684856,0.519989014 L7.58750873,1.58064919 L2.16288753,7.00527039 L7.58750873,12.4298916 Z\" id=\"path-1\"></path>    </defs>    <g id=\"3.Icons/Outlined/arrow\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">        <g id=\"Group\" transform=\"translate(2.000000, 5.000000)\">            <mask id=\"mask-2\" fill=\"white\">                <use xlink:href=\"#path-1\"></use>            </mask>            <use id=\"图标颜色\" fill-opacity=\"0.9\" fill=\"#000000\" transform=\"translate(4.020784, 7.005270) rotate(-180.000000) translate(-4.020784, -7.005270) \" xlink:href=\"#path-1\"></use>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"12px\" height=\"24px\" viewBox=\"0 0 12 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/arrow</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/arrow\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(-2.000000, 5.000000)\" fill=\"#000000\">            <path d=\"M3,2.5039609 L11,2.5039609 L11,4.5039609 L4,4.5039609 L4,11.5039609 L2,11.5039609 L2,3.5039609 C2,2.95167615 2.44771525,2.5039609 3,2.5039609 Z\" id=\"图标颜色\" transform=\"translate(6.500000, 7.003961) rotate(135.000000) translate(-6.500000, -7.003961) \"></path>        </g>    </g></svg>` },\n    \"at\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/at</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/at\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M9.26953125,6.1875 C7.5703125,6.1875 6.46875,7.62890625 6.46875,9.84375 C6.46875,12.046875 7.55859375,13.4765625 9.2578125,13.4765625 C10.9921875,13.4765625 12.1054688,12.0234375 12.1054688,9.78515625 C12.1054688,7.58203125 11.015625,6.1875 9.26953125,6.1875 Z M9.64453125,-3.67705866e-13 C14.779824,-3.67705866e-13 19.0195312,3.52734375 19.0195312,8.71875 C19.0195312,12.4453125 17.4726562,14.8359375 14.8945312,14.8359375 C13.5,14.8359375 12.3984375,13.9921875 12.2226562,12.6796875 L12.140625,12.6796875 C11.6132812,14.015625 10.5234375,14.7539062 9.0703125,14.7539062 C6.65625,14.7539062 5.015625,12.7617187 5.015625,9.80859375 C5.015625,6.92578125 6.6796875,4.93359375 9.0703125,4.93359375 C10.4296875,4.93359375 11.6132812,5.671875 12.046875,6.8203125 L12.1289062,6.8203125 L12.1289062,5.16796875 L13.4882812,5.16796875 L13.4882812,11.8710937 C13.4882812,12.9375 14.0507812,13.640625 15.1171875,13.640625 C16.6757812,13.640625 17.7421875,11.8476562 17.7421875,8.6953125 C17.7421875,4.21875 14.2381961,1.17570471 9.64453125,1.17570471 C5.05086641,1.17570471 1.2890625,4.52563768 1.2890625,9.7734375 C1.2890625,14.6481839 5.3031848,18.3632812 9.7734375,18.3632812 C11.3554688,18.3632812 12.8671875,18.1640625 13.6640625,17.8476562 L13.6640625,19.0078125 C12.7148438,19.3359375 11.3320312,19.5234375 9.76171875,19.5234375 C4.19794948,19.5234375 0,15.3256061 0,9.7265625 C0,4.12751891 4.50923846,-3.67705866e-13 9.64453125,-3.67705866e-13 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/at</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/at\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(1.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10.4648438,7.14453125 C9.22265625,7.14453125 8.484375,8.1640625 8.484375,9.875 C8.484375,11.5742188 9.22265625,12.6054688 10.453125,12.6054688 C11.71875,12.6054688 12.5039062,11.5625 12.5039062,9.875 C12.5039062,8.1875 11.71875,7.14453125 10.4648438,7.14453125 Z M10.8515625,0.01953125 C16.40625,0.01953125 20.3085938,3.51171875 20.3085938,8.7265625 C20.3085938,12.4179688 18.5625,14.796875 15.703125,14.796875 C14.25,14.796875 13.1367188,14.09375 12.8789062,12.9570312 L12.7148437,12.9570312 C12.234375,14.1289062 11.25,14.7617188 9.890625,14.7617188 C7.453125,14.7617188 5.82421875,12.78125 5.82421875,9.8046875 C5.82421875,6.95703125 7.4296875,5.01171875 9.7734375,5.01171875 C11.0390625,5.01171875 12.09375,5.64453125 12.5507812,6.67578125 L12.7148437,6.67578125 L12.7148437,5.26953125 L15.09375,5.26953125 L15.09375,11.5390625 C15.09375,12.3476562 15.46875,12.8632812 16.2070312,12.8632812 C17.3554688,12.8632812 18.1523438,11.3984375 18.1523438,8.90234375 C18.1523438,4.63671875 15.2109375,1.8828125 10.7695312,1.8828125 C6.2578125,1.8828125 3.09375,5.140625 3.09375,9.8515625 C3.09375,14.7851562 6.38671875,17.6679688 11.2148438,17.6679688 C12.46875,17.6679688 13.7460938,17.5039062 14.4140625,17.2578125 L14.4140625,19.1328125 C13.5,19.4023438 12.3046875,19.5664062 11.0390625,19.5664062 C5.109375,19.5664062 0.9375,15.8515625 0.9375,9.79296875 C0.9375,3.98046875 5.00390625,0.01953125 10.8515625,0.01953125 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"back\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"12px\" height=\"24px\" viewBox=\"0 0 12 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/back</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/back\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(1.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M9,16.4375 L7.95453228,17.5 L0.289492864,9.71008525 C-0.0963897671,9.317916 -0.0915538699,8.67716932 0.289492864,8.28991475 L7.95453228,0.5 L9,1.5625 L1.68172599,9 L9,16.4375 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"12px\" height=\"24px\" viewBox=\"0 0 12 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/back</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/back\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"图标颜色\" transform=\"translate(0.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M3.34314575,9 L10.4142136,16.0710678 L9,17.4852814 L1.22182541,9.70710678 C0.831301115,9.31658249 0.831301115,8.68341751 1.22182541,8.29289322 L9,0.514718626 L10.4142136,1.92893219 L3.34314575,9 Z\"></path>        </g>    </g></svg>` },\n    \"back2\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/back2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/back2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M11.998534,13.4375 L10.9530663,14.5 L7.29043516,10.7230029 C6.90322246,10.3236994 6.9031541,9.6763711 7.29043516,9.27699715 L10.9530663,5.5 L11.998534,6.5625 L8.68025999,10 L11.998534,13.4375 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/back2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/back2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M11.998534,13.4375 L8.68025999,10 L11.998534,6.5625 L10.9530663,5.5 L7.29043516,9.27699715 C6.9031541,9.6763711 6.90322246,10.3236994 7.29043516,10.7230029 L10.9530663,14.5 L11.998534,13.4375 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"bellring-off\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/bellring_off</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/bellring_off\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_mute\" fill=\"#000000\">            <path d=\"M18.8048808,17.107824 L22.4249789,20.7279221 L21.5764507,21.5764502 L4.84852868,4.84852817 L5.69705685,4 L7.60857571,5.91151886 C8.26739702,5.20419447 9.09506285,4.6562304 10.0273967,4.33180314 C10.0093774,4.22388264 10,4.11303643 10,4 C10,2.8954305 10.8954305,2 12,2 C13.1045695,2 14,2.8954305 14,4 C14,4.11303643 13.9906226,4.22388264 13.9726033,4.33180314 C16.317288,5.14769073 18,7.37733614 18,10 L18,14 C18,15.0359413 18.2682936,16.0718826 18.8048808,17.107824 Z M8.45731125,6.7602544 L16.9005511,15.2034943 C16.8336616,14.8040214 16.8,14.4027783 16.8,14 L16.8,10 C16.8,7.94086096 15.4913875,6.13087529 13.5782297,5.46514753 L12.6222987,5.13250909 L12.7889885,4.13417698 C12.7962818,4.09049657 12.8,4.04574037 12.8,4 C12.8,3.5581722 12.4418278,3.2 12,3.2 C11.5581722,3.2 11.2,3.5581722 11.2,4 C11.2,4.04574037 11.2037182,4.09049657 11.2110115,4.13417698 L11.3777013,5.13250909 L10.4217703,5.46514753 C9.65461156,5.73209825 8.9846599,6.18303836 8.45731125,6.7602544 Z M18.3029714,20.0000282 L12,20.0000282 L5.18670673,20.0000282 C4.97372563,20.0000282 4.76630774,19.9319983 4.59466757,19.8059007 C4.14960038,19.4789265 4.05386708,18.8530633 4.38084128,18.4079961 C5.46027096,16.9386502 6,15.4693251 6,14 L6,10 C6,9.30936012 6.11668844,8.64597429 6.33142549,8.02848234 L7.30447337,9.00153022 C7.23589042,9.32480971 7.2,9.65898818 7.2,10 L7.2,14 C7.2,15.6303277 6.64849214,17.2355113 5.57422114,18.8000266 L12.000005,18.8000266 L17.1029698,18.8000266 L18.3029714,20.0000282 Z M11,20 L13,20 L13,20.2 C13,20.7522848 12.5522847,21.2 12,21.2 C11.4477153,21.2 11,20.7522848 11,20.2 L11,20 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/bell-ring_off</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/bell-ring_off\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(4.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M14.4530995,14.3317792 L18.0918831,17.9705627 L17.0312229,19.0312229 L0.0606601718,2.06066017 L1.12132034,1 L3.81845045,3.69713011 C4.4398094,3.09318282 5.19153957,2.62265908 6.02739671,2.33180314 C6.0093774,2.22388264 6,2.11303643 6,2 C6,0.8954305 6.8954305,0 8,0 C9.1045695,0 10,0.8954305 10,2 C10,2.11303643 9.9906226,2.22388264 9.97260329,2.33180314 C12.317288,3.14769073 14,5.37733614 14,8 L14,12 C14,12.7772597 14.1510332,13.5545194 14.4530995,14.3317792 Z M13.8787079,18.0000282 L8,18.0000282 L1.18670673,18.0000282 C0.973725629,18.0000282 0.766307737,17.9319983 0.594667574,17.8059007 C0.149600376,17.4789265 0.0538670836,16.8530633 0.380841281,16.4079961 C1.46027096,14.9386502 2,13.4693251 2,12 L2,8 C2,7.42805163 2.08002731,6.87479463 2.22949529,6.35081564 L13.8787079,18.0000282 Z M7,18 L9,18 L9,18.2 C9,18.7522848 8.55228475,19.2 8,19.2 C7.44771525,19.2 7,18.7522848 7,18.2 L7,18 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"bellring-on\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/bellring_on</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/bellring_on\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(4.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M6,2 C6,0.8954305 6.8954305,0 8,0 C9.1045695,0 10,0.8954305 10,2 C10,2.11303643 9.9906226,2.22388264 9.97260329,2.33180314 C12.317288,3.14769073 14,5.37733614 14,8 L14,12 C14,13.4693091 14.5397173,14.9386183 15.619152,16.4079274 C15.7452557,16.5795777 15.8132606,16.7870072 15.8132606,17 C15.8132606,17.5523003 15.3655327,18.0000282 14.8132324,18.0000282 L8,18.0000282 L1.18670673,18.0000282 C0.973725629,18.0000282 0.766307737,17.9319983 0.594667574,17.8059007 C0.149600376,17.4789265 0.0538670836,16.8530633 0.380841281,16.4079961 C1.46027096,14.9386502 2,13.4693251 2,12 L2,8 C2,5.37733614 3.68271203,3.14769073 6.02739671,2.33180314 C6.0093774,2.22388264 6,2.11303643 6,2 Z M8.00000497,16.8000266 L14.4258309,16.8000266 C13.3515289,15.2355634 12.8,13.6303581 12.8,12 L12.8,8 C12.8,5.94086096 11.4913875,4.13087529 9.57822974,3.46514753 L8.6222987,3.13250909 L8.78898853,2.13417698 C8.79628178,2.09049657 8.8,2.04574037 8.8,2 C8.8,1.5581722 8.4418278,1.2 8,1.2 C7.5581722,1.2 7.2,1.5581722 7.2,2 C7.2,2.04574037 7.20371822,2.09049657 7.21101147,2.13417698 L7.3777013,3.13250909 L6.42177026,3.46514753 C4.50861248,4.13087529 3.2,5.94086096 3.2,8 L3.2,12 C3.2,13.6303277 2.64849214,15.2355113 1.57422114,16.8000266 L8.00000497,16.8000266 Z M7,18 L9,18 L9,18.2 C9,18.7522848 8.55228475,19.2 8,19.2 C7.44771525,19.2 7,18.7522848 7,18.2 L7,18 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/bell-ring_on</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/bell-ring_on\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" fill=\"#000000\">            <path d=\"M11,20 L5.18670673,20 C4.97372563,20 4.76630774,19.9319983 4.59466757,19.8059007 C4.14960038,19.4789265 4.05386708,18.8530633 4.38084128,18.4079961 L4.38081287,18.4079752 C5.46027096,16.9386502 6,15.4693251 6,14 L6,10 C6,7.37733614 7.68271203,5.14769073 10.0273967,4.33180314 C10.0093774,4.22388264 10,4.11303643 10,4 C10,2.8954305 10.8954305,2 12,2 C13.1045695,2 14,2.8954305 14,4 C14,4.11303643 13.9906226,4.22388264 13.9726033,4.33180314 C16.317288,5.14769073 18,7.37733614 18,10 L18,14 C18,15.4693091 18.5397173,16.9386183 19.619152,18.4079274 C19.7452557,18.5795777 19.8132606,18.7870072 19.8132606,19 C19.8132606,19.5523003 19.3655327,20.0000282 18.8132324,20.0000282 L13,20 L13,20.2 C13,20.7522848 12.5522847,21.2 12,21.2 C11.4477153,21.2 11,20.7522848 11,20.2 L11,20 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"camera\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/camera</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/camera\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon20\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M12.3577795,1.2 L7.64222051,1.2 L5.64222051,4.2 L1.2,4.2 L1.2,14.8 L18.8,14.8 L18.8,4.2 L14.3577795,4.2 L12.3577795,1.2 Z M12.7324081,0 C12.8995847,0 13.0557004,0.0835505677 13.1484333,0.222649902 L15,3 L19,3 C19.5522847,3 20,3.44771525 20,4 L20,15 C20,15.5522847 19.5522847,16 19,16 L1,16 C0.44771525,16 0,15.5522847 0,15 L0,4 C0,3.44771525 0.44771525,3 1,3 L5,3 L6.85156673,0.222649902 C6.94429962,0.0835505677 7.10041529,0 7.26759188,0 L12.7324081,0 Z M10,11.8 C11.5463973,11.8 12.8,10.5463973 12.8,9 C12.8,7.4536027 11.5463973,6.2 10,6.2 C8.4536027,6.2 7.2,7.4536027 7.2,9 C7.2,10.5463973 8.4536027,11.8 10,11.8 Z M10,13 C7.790861,13 6,11.209139 6,9 C6,6.790861 7.790861,5 10,5 C12.209139,5 14,6.790861 14,9 C14,11.209139 12.209139,13 10,13 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/camera</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/camera\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon20\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M12.7324081,0 C12.8995847,5.6322073e-16 13.0557004,0.0835505677 13.1484333,0.222649902 L15,3 L19,3 C19.5522847,3 20,3.44771525 20,4 L20,15 C20,15.5522847 19.5522847,16 19,16 L1,16 C0.44771525,16 6.76353751e-17,15.5522847 0,15 L0,4 C-6.76353751e-17,3.44771525 0.44771525,3 1,3 L5,3 L6.85156673,0.222649902 C6.94429962,0.0835505677 7.10041529,3.07098421e-17 7.26759188,0 L12.7324081,0 Z M10,12.5 C11.9329966,12.5 13.5,10.9329966 13.5,9 C13.5,7.06700338 11.9329966,5.5 10,5.5 C8.06700338,5.5 6.5,7.06700338 6.5,9 C6.5,10.9329966 8.06700338,12.5 10,12.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"cellphone\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/cellphone</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/cellphone\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(5.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M0,1 C0,0.44771525 0.44771525,0 1,0 L13,0 C13.5522847,0 14,0.44771525 14,1 L14,19 C14,19.5522847 13.5522847,20 13,20 L1,20 C0.44771525,20 0,19.5522847 0,19 L0,1 Z M1.2,1.2 L1.2,18.8 L12.8,18.8 L12.8,1.2 L1.2,1.2 Z M7,18 C6.44771525,18 6,17.5522847 6,17 C6,16.4477153 6.44771525,16 7,16 C7.55228475,16 8,16.4477153 8,17 C8,17.5522847 7.55228475,18 7,18 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/cellphone</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/cellphone\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" fill=\"#000000\">            <path d=\"M5,3 C5,2.44771525 5.44771525,2 6,2 L18,2 C18.5522847,2 19,2.44771525 19,3 L19,21 C19,21.5522847 18.5522847,22 18,22 L6,22 C5.44771525,22 5,21.5522847 5,21 L5,3 Z M12,20 C12.5522847,20 13,19.5522847 13,19 C13,18.4477153 12.5522847,18 12,18 C11.4477153,18 11,18.4477153 11,19 C11,19.5522847 11.4477153,20 12,20 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"clip\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/clip</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/clip\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M4.20000005,4.20000005 L4.20000005,13.8 L13.8,13.8 L13.8,4.20000005 L4.20000005,4.20000005 Z M3,4.20000005 L0,4.20000005 L0,3 L3,3 L3,0 L4.20000005,0 L4.20000005,3 L13.8,3 L14,3 C14.5522847,3 15,3.44771525 15,4 L15,13.8 L18,13.8 L18,15 L15,15 L15,18 L13.8,18 L13.8,15 L4,15 C3.44771525,15 3,14.5522847 3,14 L3,4.20000005 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/clip</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/clip\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M13,15 L4,15 C3.44771525,15 3,14.5522847 3,14 L3,5 L0,5 L0,3 L3,3 L3,0 L5,0 L5,3 L14,3 C14.5522847,3 15,3.44771525 15,4 L15,13 L18,13 L18,15 L15,15 L15,18 L13,18 L13,15 Z M13,13 L13,5 L5,5 L5,13 L13,13 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"close\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/close</title>    <desc>Created with Sketch.</desc>    <defs>        <polygon id=\"path-1\" points=\"8 6.94318182 1.80681818 0.75 0.75 1.80681818 6.94318182 8 0.75 14.1931818 1.80681818 15.25 8 9.05681818 14.1931818 15.25 15.25 14.1931818 9.05681818 8 15.25 1.80681818 14.1931818 0.75\"></polygon>    </defs>    <g id=\"3.Icons/Outlined/close\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(4.000000, 4.000000)\">            <mask id=\"mask-2\" fill=\"white\">                <use xlink:href=\"#path-1\"></use>            </mask>            <use id=\"图标颜色\" fill-opacity=\"0.9\" fill=\"#000000\" xlink:href=\"#path-1\"></use>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/close</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/close\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(4.000000, 4.000000)\" fill=\"#000000\">            <polygon id=\"图标颜色\" points=\"8 6.58578644 13.6568542 0.928932188 15.0710678 2.34314575 9.41421356 8 15.0710678 13.6568542 13.6568542 15.0710678 8 9.41421356 2.34314575 15.0710678 0.928932188 13.6568542 6.58578644 8 0.928932188 2.34314575 2.34314575 0.928932188\"></polygon>        </g>    </g></svg>` },\n    \"close2\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/close2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/close2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M10.8485282,9.99999949 L13.9597982,13.1112696 L13.1112701,13.9597977 L10,10.8485277 L6.88872993,13.9597977 L6.04020176,13.1112696 L9.15147183,9.99999949 L6.04020176,6.88872993 L6.88873043,6.04020176 L10,9.15147132 L13.1112696,6.04020176 L13.9597982,6.88872993 L10.8485282,9.99999949 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/close2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/close2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_miniprogram\" fill=\"#000000\">            <path d=\"M13.0606602,12 L16.065864,8.99479618 L15.0052038,7.93413601 L12,10.9393398 L8.99479618,7.93413601 L7.93413601,8.99479618 L10.9393398,12 L7.93413601,15.0052038 L8.99479618,16.065864 L12,13.0606602 L15.0052038,16.065864 L16.065864,15.0052038 L13.0606602,12 Z M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"comment\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/comment</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/comment\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group-22\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M8.50294373,13.8 L18.5,13.8 C18.6656854,13.8 18.8,13.6656854 18.8,13.5 L18.8,1.5 C18.8,1.33431458 18.6656854,1.2 18.5,1.2 L1.5,1.2 C1.33431458,1.2 1.2,1.33431458 1.2,1.5 L1.2,13.5 C1.2,13.6656854 1.33431458,13.8 1.5,13.8 L6.2,13.8 L6.2,16.1029437 L8.50294373,13.8 Z M9,15 L6.70710678,17.2928932 C6.31658249,17.6834175 5.68341751,17.6834175 5.29289322,17.2928932 C5.10535684,17.1053568 5,16.8510029 5,16.5857864 L5,15 L1.5,15 C0.671572875,15 0,14.3284271 0,13.5 L0,1.5 C0,0.671572875 0.671572875,0 1.5,0 L18.5,0 C19.3284271,0 20,0.671572875 20,1.5 L20,13.5 C20,14.3284271 19.3284271,15 18.5,15 L9,15 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/comment</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/comment\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group-22\" fill=\"#000000\">            <path d=\"M11,19 L8.70710678,21.2928932 C8.31658249,21.6834175 7.68341751,21.6834175 7.29289322,21.2928932 C7.10535684,21.1053568 7,20.8510029 7,20.5857864 L7,19 L3.5,19 C2.67157288,19 2,18.3284271 2,17.5 L2,5.5 C2,4.67157288 2.67157288,4 3.5,4 L20.5,4 C21.3284271,4 22,4.67157288 22,5.5 L22,17.5 C22,18.3284271 21.3284271,19 20.5,19 L11,19 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"contacts\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/contacts</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/contacts\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon12\" transform=\"translate(1.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M17.8,16.8 L17.8,16.3154633 C17.8,16.0860594 17.564679,15.7100199 17.3598095,15.6100873 L11.6994561,12.8490401 C10.1728743,12.1043932 9.79557277,10.302913 10.8893366,9.00636847 L11.2508692,8.57780877 C11.802195,7.92426863 12.3,6.56439093 12.3,5.71018568 L12.3,4.00020747 C12.3,2.4549142 11.0455898,1.2 9.5,1.2 C7.95630885,1.2 6.7,2.4552027 6.7,3.99958038 L6.7,5.70929053 C6.7,6.56566389 7.19574673,7.92048381 7.74907842,8.57631176 L8.11061095,9.00481267 C9.20663642,10.3038601 8.82521432,12.1036503 7.30071945,12.8475869 L1.6403663,15.6097766 C1.43701709,15.7090088 1.2,16.0886771 1.2,16.3154633 L1.2,16.8 L17.8,16.8 Z M0,17 L0,16.3154633 C0,15.6303744 0.498150907,14.8319079 1.11409761,14.5313327 L6.77445076,11.769143 C7.59537712,11.36854 7.78625906,10.4812624 7.19344522,9.7786389 L6.83191269,9.35013798 C6.09631763,8.47828515 5.5,6.84949648 5.5,5.70929053 L5.5,3.99958038 C5.5,1.79067313 7.29535615,0 9.5,0 C11.709139,0 13.5,1.79298022 13.5,4.00020747 L13.5,5.71018568 C13.5,6.84929595 12.9009324,8.48286035 12.1680872,9.35157303 L11.8065546,9.78013273 C11.2170324,10.4789507 11.4011877,11.3683976 12.225549,11.7705104 L17.8859024,14.5315576 C18.5012015,14.8316925 19,15.6251701 19,16.3154633 L19,17 C19,17.5522847 18.5522847,18 18,18 L1,18 C0.44771525,18 0,17.5522847 0,17 Z M19,11.5 L22,11.5 L22,12.7 L19,12.7 L19,11.5 Z M17,8.5 L22,8.5 L22,9.70000005 L17,9.70000005 L17,8.5 Z M15,5.5 L22,5.5 L22,6.70000005 L15,6.70000005 L15,5.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/contacts</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/contacts\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon12\" fill=\"#000000\">            <path d=\"M1,20 L1,19.3154633 C1,18.6303744 1.49815091,17.8319079 2.11409761,17.5313327 L7.77445076,14.769143 C8.59537712,14.36854 8.78625906,13.4812624 8.19344522,12.7786389 L7.83191269,12.350138 C7.09631763,11.4782852 6.5,9.84949648 6.5,8.70929053 L6.5,6.99958038 C6.5,4.79067313 8.29535615,3 10.5,3 C12.709139,3 14.5,4.79298022 14.5,7.00020747 L14.5,8.71018568 C14.5,9.84929595 13.9009324,11.4828603 13.1680872,12.351573 L12.8065546,12.7801327 C12.2170324,13.4789507 12.4011877,14.3683976 13.225549,14.7705104 L18.8859024,17.5315576 C19.5012015,17.8316925 20,18.6251701 20,19.3154633 L20,20 C20,20.5522847 19.5522847,21 19,21 L2,21 C1.44771525,21 1,20.5522847 1,20 Z M20,14.5 L23,14.5 L23,16 L20,16 L20,14.5 Z M18,11.5 L23,11.5 L23,13 L18,13 L18,11.5 Z M16,8.5 L23,8.5 L23,10 L16,10 L16,8.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"copy\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/copy</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/copy\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(5.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M7.4,1.2 L1.2,1.2 L1.2,18.8 L13.8,18.8 L13.8,7.6 L9,7.6 C8.1163444,7.6 7.4,6.8836556 7.4,6 L7.4,1.2 Z M8.6,1.2989947 L8.6,6 C8.6,6.2209139 8.7790861,6.4 9,6.4 L13.702787,6.4 L8.6,1.2989947 Z M0.995808514,0 L8.99790426,0 L15,6 L15,19.0013542 C15,19.5542301 14.5541613,20 14.0041915,20 L0.995808514,20 C0.448920205,20 0,19.552891 0,19.0013542 L0,0.998645811 C0,0.445769913 0.445838658,0 0.995808514,0 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/copy</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/copy\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(5.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M8.6,1.2989947 L8.6,6 C8.6,6.2209139 8.7790861,6.4 9,6.4 L13.702787,6.4 L8.6,1.2989947 Z M0.995808514,0 L8.99790426,0 L15,6 L15,19.0013542 C15,19.5542301 14.5541613,20 14.0041915,20 L0.995808514,20 C0.448920205,20 0,19.552891 0,19.0013542 L0,0.998645811 C0,0.445769913 0.445838658,0 0.995808514,0 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"delete-on\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/delete_on</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/delete_on\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon39\" fill=\"#000000\">            <path d=\"M6.77355253,6.399997 L7.58590583,20.0475349 C7.61106164,20.4701525 7.96112672,20.8 8.38449235,20.8 L15.6155076,20.8 C16.0388733,20.8 16.3889384,20.4701525 16.4140942,20.0475349 L17.2264475,6.399997 L18.4285714,6.399997 L17.611974,20.1188373 C17.5490844,21.1753813 16.6739217,22 15.6155076,22 L8.38449235,22 C7.32607828,22 6.45091556,21.1753813 6.38802605,20.1188373 L5.57142856,6.399997 L6.77355253,6.399997 Z M9.5,9 L10.7000122,9 L11.2000122,18 L10,18 L9.5,9 Z M13.2999878,9 L14.5,9 L14,18 L12.7999878,18 L13.2999878,9 Z M4.4590499,2.35303271 L20.2159739,5.13140356 C20.4879211,5.17935518 20.6695054,5.43868437 20.6215537,5.71063152 L20.5,6.399997 L3.7582682,3.44797798 L3.87982193,2.7586125 C3.92777355,2.48666535 4.18710275,2.30508109 4.4590499,2.35303271 Z M10.7499171,1.2283746 L14.6891481,1.92296731 C14.9610953,1.97091893 15.1426796,2.23024812 15.0947279,2.50219528 L14.9731747,3.1915577 L10.049136,2.32331681 L10.1706892,1.63395439 C10.2186408,1.36200724 10.47797,1.18042298 10.7499171,1.2283746 Z\" id=\"Path-2\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/delete_on</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/delete_on\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon39\" fill=\"#000000\">            <path d=\"M9.77436653,5 L3.7582682,3.93919955 L3.93191675,2.95438967 C3.97986837,2.68244252 4.23919756,2.50085826 4.51114472,2.54880988 L18.4125347,5 L18.5,5 L18.4125347,5 L20.2680688,5.32718073 C20.5400159,5.37513235 20.7216002,5.63446154 20.6736486,5.90640869 L20.5,6.89121857 L18.4104253,6.52277017 L17.6107386,20.117444 C17.5485547,21.1745693 16.6731425,22 15.6141898,22 L8.38581016,22 C7.32685754,22 6.45144525,21.1745693 6.38926141,20.117444 L5.58823542,6.50000215 L18.2813015,6.50000215 L9.77436653,5 L5.5,5 L9.77436653,5 Z M9,8.99998133 L9.5,17.9999943 L11,17.9999943 L10.6000004,8.99998133 L9,8.99998133 Z M13.5,8.99998133 L13,17.9999943 L14.5,17.9999943 L15,8.99998133 L13.5,8.99998133 Z M10.8541058,1.12871315 L14.7933368,1.82330587 C15.0652839,1.87125749 15.2468682,2.13058668 15.1989166,2.40253383 L15.0252743,3.387308 L10.1012355,2.51906711 L10.2748778,1.53429294 C10.3228294,1.26234579 10.5821586,1.08076153 10.8541058,1.12871315 L10.8541058,1.12871315 Z\" id=\"Shape\"></path>        </g>    </g></svg>` },\n    \"delete\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/delete</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/delete\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon39\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M3.77355253,3.39999695 L4.58590583,17.0475349 C4.61106164,17.4701525 4.96112672,17.8 5.38449235,17.8 L12.6155076,17.8 C13.0388733,17.8 13.3889384,17.4701525 13.4140942,17.0475349 L14.2264475,3.39999695 L3.77355253,3.39999695 Z M15.4285714,3.399997 L14.611974,17.1188373 C14.5490844,18.1753813 13.6739217,19 12.6155076,19 L5.38449235,19 C4.32607828,19 3.45091556,18.1753813 3.38802605,17.1188373 L2.57142856,3.399997 L0.5,3.399997 L0.5,2.69999695 C0.5,2.42385457 0.723857625,2.19999695 1,2.19999695 L17,2.19999695 C17.2761424,2.19999695 17.5,2.42385457 17.5,2.69999695 L17.5,3.399997 L15.4285714,3.399997 Z M11,2.72855691e-05 C11.2761424,2.72855691e-05 11.5,0.223884911 11.5,0.500027286 L11.5,1.20002423 L6.5,1.20002423 L6.5,0.500027286 C6.5,0.223884911 6.72385763,2.72855691e-05 7,2.72855691e-05 L11,2.72855691e-05 Z M6.5,6 L7.70001221,6 L8.20001221,15 L7,15 L6.5,6 Z M10.2999878,6 L11.5,6 L11,15 L9.79998779,15 L10.2999878,6 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/delete</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/delete\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon39\" fill=\"#000000\">            <g id=\"Group-3\" transform=\"translate(3.000000, 2.000000)\">                <path d=\"M15.4117647,4.5 L14.6107386,18.117444 C14.5485547,19.1745693 13.6731425,20 12.6141898,20 L5.38581016,20 C4.32685754,20 3.45144525,19.1745693 3.38926141,18.117444 L2.58823529,4.5 L0.5,4.5 L0.5,3.5 C0.5,3.22385763 0.723857625,3 1,3 L17,3 C17.2761424,3 17.5,3.22385763 17.5,3.5 L17.5,4.5 L15.4117647,4.5 Z M7,0.500034106 L11,0.500034106 C11.2761424,0.500034106 11.5,0.723891731 11.5,1.00003411 L11.5,2 L6.5,2 L6.5,1.00003411 C6.5,0.723891731 6.72385763,0.500034106 7,0.500034106 Z M6,6.99998133 L6.5,15.9999943 L8,15.9999943 L7.60000038,6.99998133 L6,6.99998133 Z M10.5,6.99998133 L10,15.9999943 L11.5,15.9999943 L12,6.99998133 L10.5,6.99998133 Z\" id=\"图标颜色\"></path>            </g>        </g>    </g></svg>` },\n    \"discover\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/discover</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/discover\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M9.12335563,9.12335563 L7.26736162,12.7326384 L10.8766444,10.8766444 L12.7326384,7.26736162 L9.12335563,9.12335563 Z M8.23223305,8.23223305 L14.1243501,5.20234187 C14.2678549,5.12854767 14.4381526,5.12854767 14.5816575,5.20234187 C14.8272333,5.32862381 14.9239401,5.63007409 14.7976581,5.87564991 L11.767767,11.767767 L5.87564991,14.7976581 C5.73214506,14.8714523 5.56184738,14.8714523 5.41834253,14.7976581 C5.17276672,14.6713762 5.07605992,14.3699259 5.20234187,14.1243501 L8.23223305,8.23223305 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/discover</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/discover\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon22\" fill=\"#000000\">            <path d=\"M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z M10.6035341,10.6035341 L7.64699622,16.3530038 L13.3964659,13.3964659 L16.3530038,7.64699622 L10.6035341,10.6035341 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"display\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/display</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/display\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_tv&amp;display\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M1.2,1.2 L1.2,13.8 L18.8,13.8 L18.8,1.2 L1.2,1.2 Z M0,1 C0,0.44771525 0.44771525,0 1,0 L19,0 C19.5522847,0 20,0.44771525 20,1 L20,14 C20,14.5522847 19.5522847,15 19,15 L1,15 C0.44771525,15 0,14.5522847 0,14 L0,1 Z M6,16.8999993 C6,16.5686284 6.26617432,16.2999992 6.60130024,16.2999992 L13.3986998,16.2999992 C13.7307887,16.2999992 14,16.5783196 14,16.8999993 L14,17.4999993 L6,17.4999993 L6,16.8999993 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/display</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/display\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_tv&amp;display\" fill=\"#000000\">            <g id=\"Pic\" transform=\"translate(2.000000, 3.500000)\">                <path d=\"M0,1.5 C0,0.94771525 0.44771525,0.5 1,0.5 L19,0.5 C19.5522847,0.5 20,0.94771525 20,1.5 L20,14.5 C20,15.0522847 19.5522847,15.5 19,15.5 L1,15.5 C0.44771525,15.5 0,15.0522847 0,14.5 L0,1.5 Z M6,17.5499992 C6,17.1357857 6.34375,16.7999992 6.75262058,16.7999992 L13.2473794,16.7999992 C13.6630403,16.7999992 14,17.1328979 14,17.5499992 L14,18.2999992 L6,18.2999992 L6,17.5499992 Z\" id=\"图标颜色\"></path>            </g>        </g>    </g></svg>` },\n    \"done\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/done</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/done\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 5.000000)\" fill=\"#000000\">            <path d=\"M6.86396103,11.6170094 L1.56066017,6.3137085 L0.5,7.37436867 L6.15685425,13.0312229 C6.54737854,13.4217472 7.18054352,13.4217472 7.57106781,13.0312229 L19.2383297,1.36396103 L18.1776695,0.303300859 L6.86396103,11.6170094 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/done</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/done\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_done\" fill=\"#000000\">            <path d=\"M8.65685425,18.4350288 L3,12.7781746 L4.41421356,11.363961 L9.36396103,16.3137085 L20.6776695,5 L22.0918831,6.41421356 L10.0710678,18.4350288 C9.68054352,18.8255531 9.04737854,18.8255531 8.65685425,18.4350288 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"done2\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/done2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/done2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M8.82842729,12.5583261 L14.6367534,6.75 L15.4852815,7.59852817 L9.53553407,13.5482756 C9.14500978,13.9387999 8.5118448,13.9387999 8.12132051,13.5482756 L5,10.4269551 L5.84852817,9.57842696 L8.82842729,12.5583261 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/done2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/done2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_miniprogram\" fill=\"#000000\">            <path d=\"M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z M10.8234373,14.1393166 L8.05753759,11.3734169 L7,12.4309545 L10.1188091,15.5520194 C10.1187366,15.5521643 10.1187728,15.5522005 10.118809,15.5522368 C10.5092522,15.9428422 11.1424171,15.9429738 11.5329139,15.5524219 L17.4852815,9.60252752 L16.422754,8.53999996 L10.8234373,14.1393166 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"download\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/download</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/download\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon38\" transform=\"translate(4.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M14.8,6.2 L12,6.2 L12,5 L15.0010434,5 C15.5508697,5 16,5.44583866 16,5.99580851 L16,19.0041915 C16,19.5510798 15.5541613,20 15.0041915,20 L0.995808514,20 C0.448920205,20 0,19.5541613 0,19.0041915 L0,5.99580851 C0,5.44892021 0.447248087,5 0.998956561,5 L4,5 L4,6.2 L1.2,6.2 L1.2,18.8 L14.8,18.8 L14.8,6.2 Z M8.59999394,10.6171633 L10.6870057,8.53015149 L11.5355339,9.37867966 L8.70710678,12.2071068 C8.31658249,12.5976311 7.68341751,12.5976311 7.29289322,12.2071068 L4.46446609,9.37867966 L5.31299427,8.53015149 L7.3999939,10.6171511 L7.3999939,0 L8.59999394,0 L8.59999394,10.6171633 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/download</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/download\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon38\" fill=\"#000000\">            <path d=\"M11.25,12.0397591 L9.53050029,10.3199997 L8.47000027,11.3806599 L11.2978402,14.2091404 C11.688335,14.5996941 12.3215,14.5997419 12.7120537,14.2090336 L15.5400004,11.3806599 L14.4795004,10.3199997 L12.75,12.0497613 L12.75,7 L11.25,7 L11.25,12.0397591 Z M11.25,7 L11.25,2 L12.75,2 L12.75,7 L19.0010434,7 C19.5508697,7 20,7.44583866 20,7.99580851 L20,21.0041915 C20,21.5510798 19.5541613,22 19.0041915,22 L4.99580851,22 C4.44892021,22 4,21.5541613 4,21.0041915 L4,7.99580851 C4,7.44892021 4.44724809,7 4.99895656,7 L11.25,7 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"email\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/email</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/email\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_email\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M2.2,1.2 L9.76,6.87 C9.90222222,6.97666667 10.0977778,6.97666667 10.24,6.87 L17.8,1.2 L2.2,1.2 Z M18.8,1.95 L10.96,7.83 C10.3911111,8.25666667 9.60888889,8.25666667 9.04,7.83 L1.2,1.95 L1.2,14.8 L18.8,14.8 L18.8,1.95 Z M1,0 L19,0 C19.5522847,0 20,0.44771525 20,1 L20,15 C20,15.5522847 19.5522847,16 19,16 L1,16 C0.44771525,16 0,15.5522847 0,15 L0,1 C0,0.44771525 0.44771525,0 1,0 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/email</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/email\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_email\" fill=\"#000000\">            <path d=\"M3,4 L21,4 C21.5522847,4 22,4.44771525 22,5 L22,19 C22,19.5522847 21.5522847,20 21,20 L3,20 C2.44771525,20 2,19.5522847 2,19 L2,5 C2,4.44771525 2.44771525,4 3,4 Z M19.0314787,5.91434839 L12.1561738,11.4145924 C12.0648691,11.4876361 11.9351309,11.4876361 11.8438262,11.4145924 L4.96852129,5.91434839 L4.03147871,7.08565161 L10.9067837,12.5858956 C11.5459163,13.0972017 12.4540837,13.0972017 13.0932163,12.5858956 L19.9685213,7.08565161 L19.0314787,5.91434839 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"error\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/error</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/error\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M9.34082031,4.43115234 L10.6591797,4.43115234 L10.5712891,11.4916992 L9.42871094,11.4916992 L9.34082031,4.43115234 Z M10,15.0732422 C9.53125,15.0732422 9.16503906,14.7070312 9.16503906,14.2382812 C9.16503906,13.762207 9.53125,13.4033203 10,13.4033203 C10.4760742,13.4033203 10.8349609,13.762207 10.8349609,14.2382812 C10.8349609,14.7070312 10.4760742,15.0732422 10,15.0732422 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/error</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/error\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_info\" fill=\"#000000\">            <path d=\"M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z M11.2367191,6.13574219 L11.3460941,13.7324219 L12.6517582,13.7324219 L12.7611332,6.13574219 L11.2367191,6.13574219 Z M11.9955082,17.1025391 C12.5082035,17.1025391 12.8978519,16.7197266 12.8978519,16.2207031 C12.8978519,15.7216797 12.5082035,15.3388672 11.9955082,15.3388672 C11.4964848,15.3388672 11.1000004,15.7216797 11.1000004,16.2207031 C11.1000004,16.7197266 11.4964848,17.1025391 11.9955082,17.1025391 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"eyes-off\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/eyes_off</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/eyes_off\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon21\" transform=\"translate(1.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M17.6701381,13.9730813 L20.4249789,16.7279221 L19.5764507,17.5764502 L2.84852868,0.848528171 L3.69705685,0 L6.55246809,2.85541124 C7.93196844,2.3029864 9.43174921,2 11,2 C15.8077906,2 19.9720635,4.84762755 22,9 C21.0088953,11.0293711 19.5075207,12.7471002 17.6701381,13.9730813 Z M7.48629025,3.7892334 L9.14977359,5.45271674 C9.70307173,5.1635303 10.3324386,5 11,5 C13.209139,5 15,6.790861 15,9 C15,9.66756141 14.8364697,10.2969283 14.5472833,10.8502264 L16.8030731,13.1060162 C18.3773063,12.1062525 19.7070071,10.7026267 20.6478722,9 C18.6862248,5.45012523 15.0343177,3.2 11,3.2 C9.78190146,3.2 8.59866509,3.40513103 7.48629025,3.7892334 Z M13.6379795,9.94092264 C13.7428778,9.64685352 13.7999997,9.33009741 13.7999997,8.99999976 C13.7999997,7.45360249 12.546397,6.19999981 10.9999998,6.19999981 C10.6699021,6.19999981 10.353146,6.25712171 10.0590769,6.36202004 L13.6379795,9.94092264 Z M15.4475319,15.1445888 C14.0680316,15.6970136 12.5682508,16 11,16 C6.1922094,16 2.0279365,13.1523724 -2.72848411e-12,9 C0.991104672,6.9706289 2.49247928,5.25289977 4.32986187,4.02691872 L5.19692691,4.89398376 C3.62269375,5.89374754 2.29299288,7.29737333 1.35212783,9 C3.31377519,12.5498748 6.96568232,14.8 11,14.8 C12.2180985,14.8 13.4013349,14.594869 14.5137097,14.2107666 L15.4475319,15.1445888 Z M7.45271674,7.14977359 L8.36202004,8.05907689 C8.25712171,8.353146 8.19999981,8.66990212 8.19999981,8.99999976 C8.19999981,10.546397 9.45360249,11.7999997 10.9999998,11.7999997 C11.3300974,11.7999997 11.6468535,11.7428778 11.9409226,11.6379795 L12.8502264,12.5472833 C12.2969283,12.8364697 11.6675614,13 11,13 C8.790861,13 7,11.209139 7,9 C7,8.33243859 7.1635303,7.70307173 7.45271674,7.14977359 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/eyes_off</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/eyes_off\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon21\" fill=\"#000000\">            <path d=\"M18.9218787,16.8005584 L22.0918831,19.9705627 L21.0312229,21.0312229 L4.06066017,4.06066017 L5.12132034,3 L7.8588755,5.73755516 C9.15302069,5.26004417 10.5471275,5 12,5 C16.8077906,5 20.9720635,7.84762755 23,12 C22.0545468,13.9358958 20.6447484,15.5881976 18.9218787,16.8005584 Z M10.8238458,8.70252549 L15.2974745,13.1761542 C15.4285976,12.8085676 15.5,12.4126223 15.5,12 C15.5,10.0670034 13.9329966,8.5 12,8.5 C11.5873777,8.5 11.1914324,8.57140244 10.8238458,8.70252549 Z M16.1411245,18.2624448 C14.8469793,18.7399558 13.4528725,19 12,19 C7.1922094,19 3.0279365,16.1523724 1,12 C1.94545318,10.0641042 3.35525158,8.41180238 5.07812128,7.19944162 L8.70252549,10.8238458 C8.57140244,11.1914324 8.5,11.5873777 8.5,12 C8.5,13.9329966 10.0670034,15.5 12,15.5 C12.4126223,15.5 12.8085676,15.4285976 13.1761542,15.2974745 L16.1411245,18.2624448 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"eyes-on\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/eyes_on</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/eyes_on\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon21\" transform=\"translate(1.000000, 5.000000)\" fill=\"#000000\">            <path d=\"M11,12.8 C15.0343177,12.8 18.6862248,10.5498748 20.6478722,7 C18.6862248,3.45012523 15.0343177,1.2 11,1.2 C6.96568232,1.2 3.31377519,3.45012523 1.35212783,7 C3.31377519,10.5498748 6.96568232,12.8 11,12.8 Z M11,0 C15.8077906,0 19.9720635,2.84762755 22,7 C19.9720635,11.1523724 15.8077906,14 11,14 C6.1922094,14 2.0279365,11.1523724 -1.09139364e-11,7 C2.0279365,2.84762755 6.1922094,0 11,0 Z M11,9.8 C12.5463973,9.8 13.8,8.5463973 13.8,7 C13.8,5.4536027 12.5463973,4.2 11,4.2 C9.4536027,4.2 8.2,5.4536027 8.2,7 C8.2,8.5463973 9.4536027,9.8 11,9.8 Z M11,11 C8.790861,11 7,9.209139 7,7 C7,4.790861 8.790861,3 11,3 C13.209139,3 15,4.790861 15,7 C15,9.209139 13.209139,11 11,11 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/eyes_on</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/eyes_on\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon21\" fill=\"#000000\">            <path d=\"M1,12 C3.0279365,7.84762755 7.1922094,5 12,5 C16.8077906,5 20.9720635,7.84762755 23,12 C20.9720635,16.1523724 16.8077906,19 12,19 C7.1922094,19 3.0279365,16.1523724 1,12 Z M12,15.5 C13.9329966,15.5 15.5,13.9329966 15.5,12 C15.5,10.0670034 13.9329966,8.5 12,8.5 C10.0670034,8.5 8.5,10.0670034 8.5,12 C8.5,13.9329966 10.0670034,15.5 12,15.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"folder\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/folder</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/folder\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Picture\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M18.8,5 L18.8,2.7 L8.20406273,2.7 L6.32906273,1.2 L1.2,1.2 L1.2,5 L18.8,5 Z M18.8,6.20000005 L1.2,6.20000005 L1.2,14.8 L18.8,14.8 L18.8,6.20000005 Z M1,0 L6.75,0 L8.625,1.5 L19,1.5 C19.5522847,1.5 20,1.94771525 20,2.5 L20,15 C20,15.5522847 19.5522847,16 19,16 L1,16 C0.44771525,16 0,15.5522847 0,15 L0,1 C0,0.44771525 0.44771525,0 1,0 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/folder</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/folder\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Picture\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M1,0 L6.75,0 L8.625,1.5 L19,1.5 C19.5522847,1.5 20,1.94771525 20,2.5 L20,15 C20,15.5522847 19.5522847,16 19,16 L1,16 C0.44771525,16 6.76353751e-17,15.5522847 0,15 L0,1 C-6.76353751e-17,0.44771525 0.44771525,1.01453063e-16 1,0 Z M1.5,5 L1.5,6.5 L18.5,6.5 L18.5,5 L1.5,5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"group-detail\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/group-detail</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/group-detail\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon14\" transform=\"translate(1.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M1.2,16.8 L17.8,16.8 L17.8,16.3154633 C17.8,16.0860594 17.564679,15.7100199 17.3598095,15.6100873 L11.6994561,12.8490401 C10.1728743,12.1043932 9.79557277,10.302913 10.8893366,9.00636847 L11.2508692,8.57780877 C11.802195,7.92426863 12.3,6.56439093 12.3,5.71018568 L12.3,4.00020747 C12.3,2.4549142 11.0455898,1.2 9.5,1.2 C7.95630885,1.2 6.7,2.4552027 6.7,3.99958038 L6.7,5.70929053 C6.7,6.56566389 7.19574673,7.92048381 7.74907842,8.57631176 L8.11061095,9.00481267 C9.20663642,10.3038601 8.82521432,12.1036503 7.30071945,12.8475869 L1.6403663,15.6097766 C1.43701709,15.7090088 1.2,16.0886771 1.2,16.3154633 L1.2,16.8 Z M12.4960944,1.35064233 C12.9490802,1.12626413 13.4599583,1 14,1 C15.8603276,1 17.3684211,2.49415019 17.3684211,4.33350622 L17.3684211,5.75848807 C17.3684211,6.70774662 16.8639431,8.06905029 16.2468102,8.79297753 L15.9423618,9.15011061 C15.445922,9.73245889 15.6010002,10.4736647 16.2951991,10.8087587 L21.0618125,13.1096313 C21.5799592,13.3597438 22,14.0209751 22,14.5962194 L22,15.1679682 C22,15.6274867 21.6202734,16 21.1566909,16 L18.9676453,16 C18.9887855,16.1061337 19,16.2119585 19,16.3154633 L19,17.0015619 C19,17.552984 18.5490746,18 17.9985704,18 L1.00142961,18 C0.448355308,18 0,17.5557555 0,17.0015619 L0,16.3154633 C0,15.6303744 0.498150907,14.8319079 1.11409761,14.5313327 L6.77445076,11.769143 C7.59537712,11.36854 7.78625906,10.4812624 7.19344522,9.7786389 L6.83191269,9.35013798 C6.09631763,8.47828515 5.5,6.84949648 5.5,5.70929053 L5.5,3.99958038 C5.5,1.79067313 7.29535615,0 9.5,0 C10.6925681,0 11.7632414,0.522511424 12.4960868,1.35063371 Z M13.1531568,2.36930666 C13.3760552,2.86753487 13.5,3.41953623 13.5,4.00020747 L13.5,5.71018568 C13.5,6.84929595 12.9009324,8.48286035 12.1680872,9.35157303 L11.8065546,9.78013273 C11.2170324,10.4789507 11.4011877,11.3683976 12.225549,11.7705104 L17.8859024,14.5315576 C18.0233929,14.5986237 18.1550664,14.690323 18.2766575,14.8 L20.8,14.8 L20.8,14.5962194 C20.8,14.4845959 20.6463054,14.2415527 20.5401598,14.1903156 L15.7735464,11.8894429 C14.3727962,11.2132924 14.0215331,9.55360651 15.0291527,8.37161899 L15.3336012,8.01448591 C15.76679,7.50633402 16.1684211,6.42060801 16.1684211,5.75848807 L16.1684211,4.33350622 C16.1684211,3.15902864 15.1996866,2.2 14,2.2 C13.6994787,2.2 13.4132922,2.26035387 13.1531562,2.36930543 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/group-detail</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/group-detail\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon14\" fill=\"#000000\">            <path d=\"M15.1110698,4.00178 C16.9199852,4.05984018 18.3684211,5.53089815 18.3684211,7.33350622 L18.3684211,8.75848807 C18.3684211,9.70774662 17.8639431,11.0690503 17.2468102,11.7929775 L16.9423618,12.1501106 C16.445922,12.7324589 16.6010002,13.4736647 17.2951991,13.8087587 L22.0618125,16.1096313 C22.5799592,16.3597438 23,17.0209751 23,17.5962194 L23,18.1679682 C23,18.6274867 22.6202734,19 22.1566909,19 L21.4832067,19 C21.3608065,17.8393567 20.5814047,16.689663 19.5435184,16.1833954 L14.1269298,13.5412535 L14.3146097,13.3187784 C15.276491,12.1785669 16,10.2021228 16,8.71018568 L16,7.00020747 C16,5.89435381 15.6732669,4.86441043 15.1110698,4.00178 L15.1110698,4.00178 Z M7.83191269,12.350138 C7.09631763,11.4782852 6.5,9.84949648 6.5,8.70929053 L6.5,6.99958038 C6.5,4.79067313 8.29535615,3 10.5,3 C12.709139,3 14.5,4.79298022 14.5,7.00020747 L14.5,8.71018568 C14.5,9.84929595 13.9009324,11.4828603 13.1680872,12.351573 L12.8065546,12.7801327 C12.2170324,13.4789507 12.4011877,14.3683976 13.225549,14.7705104 L18.8859024,17.5315576 C19.5012015,17.8316925 20,18.6251701 20,19.3154633 L20,20.0015619 C20,20.552984 19.5490746,21 18.9985704,21 L2.00142961,21 C1.44835531,21 1,20.5557555 1,20.0015619 L1,19.3154633 C1,18.6303744 1.49815091,17.8319079 2.11409761,17.5313327 L7.77445076,14.769143 C8.59537712,14.36854 8.78625906,13.4812624 8.19344522,12.7786389 L7.83191269,12.350138 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"help\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/help</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/help\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M7,7.70697674 C7.07674419,6.2 8.08139535,5 10.0418605,5 C11.8,5 13,6.08837209 13,7.5255814 C13,8.62093023 12.4348837,9.39534884 11.5418605,9.93255814 C10.655814,10.455814 10.4046512,10.8465116 10.4046512,11.5790698 L10.4046512,12.0325581 L9.18372093,12.0325581 L9.18372093,11.3906977 C9.17674419,10.4697674 9.62325581,9.84186047 10.5790698,9.26976744 C11.3883721,8.7744186 11.7023256,8.33488372 11.7023256,7.58837209 C11.7023256,6.72325581 11.0325581,6.08837209 9.99302326,6.08837209 C8.93953488,6.08837209 8.26976744,6.70930233 8.19302326,7.70697674 L7,7.70697674 Z M9.79767442,15.2139535 C9.35116279,15.2139535 9.00232558,14.8651163 9.00232558,14.4186047 C9.00232558,13.9651163 9.35116279,13.6232558 9.79767442,13.6232558 C10.2511628,13.6232558 10.5930233,13.9651163 10.5930233,14.4186047 C10.5930233,14.8651163 10.2511628,15.2139535 9.79767442,15.2139535 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/help</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/help\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon10\" fill=\"#000000\">            <path d=\"M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z M9,9.78222656 L10.6064453,9.78222656 C10.6611328,8.93457031 11.2285156,8.39453125 12.1103516,8.39453125 C12.9716797,8.39453125 13.5458984,8.92089844 13.5458984,9.64550781 C13.5458984,10.3222656 13.2587891,10.6914062 12.4111328,11.2041016 C11.4677734,11.7578125 11.0712891,12.3730469 11.1328125,13.3847656 L11.1396484,13.8701172 L12.7255859,13.8701172 L12.7255859,13.4736328 C12.7255859,12.7900391 12.9785156,12.4345703 13.8740234,11.9150391 C14.8037109,11.3613281 15.3232422,10.6298828 15.3232422,9.58398438 C15.3232422,8.08007812 14.0722656,7 12.1992188,7 C10.1689453,7 9.0546875,8.17578125 9,9.78222656 Z M11.953125,17.0830078 C12.5068359,17.0830078 12.9443359,16.6523438 12.9443359,16.1123047 C12.9443359,15.5722656 12.5068359,15.1484375 11.953125,15.1484375 C11.3994141,15.1484375 10.9550781,15.5722656 10.9550781,16.1123047 C10.9550781,16.6523438 11.3994141,17.0830078 11.953125,17.0830078 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"home\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/home</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/home\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon31\" transform=\"translate(2.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M11,16.8 L14.8,16.8 L14.8,9.8 L18.1029437,9.8 L10,1.69705627 L1.89705627,9.8 L5.2,9.8 L5.2,16.8 L9,16.8 L9,14 L11,14 L11,16.8 Z M16,17 C16,17.5522847 15.5522847,18 15,18 L5,18 C4.44771525,18 4,17.5522847 4,17 L4,11 L1.41421356,11 C1.14899707,11 0.89464316,10.8946432 0.707106781,10.7071068 C0.316582489,10.3165825 0.316582489,9.68341751 0.707106781,9.29289322 L9.29289322,0.707106781 C9.68341751,0.316582489 10.3165825,0.316582489 10.7071068,0.707106781 L19.2928932,9.29289322 C19.4804296,9.4804296 19.5857864,9.73478351 19.5857864,10 C19.5857864,10.5522847 19.1380712,11 18.5857864,11 L16,11 L16,17 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/home</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/home\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon31\" fill=\"#000000\">            <path d=\"M13.5,21 L13.5,17 L10.5,17 L10.5,21 L7,21 C6.44771525,21 6,20.5522847 6,20 L6,14.0000062 L3.41421259,14.0000062 C3.1489962,14.0000062 2.89464237,13.8946495 2.70710601,13.7071132 C2.31658161,13.316589 2.31658143,12.6834241 2.70710561,12.2928997 L11.2928934,3.70710618 C11.6834178,3.316582 12.3165828,3.31658218 12.7071066,3.70710698 L21.2928944,12.2928997 C21.4804306,12.480436 21.5857874,12.7347899 21.5857874,13.0000062 C21.5857874,13.552291 21.1380722,14.0000062 20.5857874,14.0000062 L18,14.0000062 L18,20 C18,20.5522847 17.5522847,21 17,21 L13.5,21 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"imac\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/imac</title>    <desc>Created with Sketch.</desc>    <defs>        <path d=\"M18.8,11 L18.8,1.2 L1.2,1.2 L1.2,11 L18.8,11 Z M18.8,12.2 L1.2,12.2 L1.2,13.8 L18.8,13.8 L18.8,12.2 Z M13.1554082,15 L13.7770168,16.8399675 C13.7944347,16.8915248 13.803319,16.9455799 13.803319,17 C13.803319,17.2761424 13.5794614,17.5 13.303319,17.5 L6.69668101,17.5 C6.64226093,17.5 6.58820584,17.4911158 6.5366485,17.4736978 C6.27503244,17.3853143 6.13459971,17.1015836 6.22298322,16.8399675 L6.84459181,15 L1,15 C0.44771525,15 0,14.5522847 0,14 L0,1 C0,0.44771525 0.44771525,0 1,0 L19,0 C19.5522847,0 20,0.44771525 20,1 L20,14 C20,14.5522847 19.5522847,15 19,15 L13.1554082,15 Z M8.11122629,14.9999878 L7.67203442,16.3 L12.3279656,16.3 L11.8887737,14.9999878 L8.11122629,14.9999878 Z\" id=\"path-1\"></path>    </defs>    <g id=\"3.Icons/Outlined/imac\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">        <g id=\"icon31\" transform=\"translate(2.000000, 4.000000)\">            <mask id=\"mask-2\" fill=\"white\">                <use xlink:href=\"#path-1\"></use>            </mask>            <use id=\"图标颜色\" fill-opacity=\"0.9\" fill=\"#000000\" xlink:href=\"#path-1\"></use>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/imac</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/imac\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon31\" fill=\"#000000\">            <g id=\"Group-2\" transform=\"translate(2.000000, 4.000000)\">                <path d=\"M13.1554082,15 L13.7770168,16.8399675 C13.7944347,16.8915248 13.803319,16.9455799 13.803319,17 C13.803319,17.2761424 13.5794614,17.5 13.303319,17.5 L6.69668101,17.5 C6.64226093,17.5 6.58820584,17.4911158 6.5366485,17.4736978 C6.27503244,17.3853143 6.13459971,17.1015836 6.22298322,16.8399675 L6.84459181,15 L1,15 C0.44771525,15 0,14.5522847 0,14 L0,1 C0,0.44771525 0.44771525,0 1,0 L19,0 C19.5522847,0 20,0.44771525 20,1 L20,14 C20,14.5522847 19.5522847,15 19,15 L13.1554082,15 L13.1554082,15 Z M18.5,12 L1.5,12 L1.5,13.5 L18.5,13.5 L18.5,12 Z\" id=\"图标颜色\"></path>            </g>        </g>    </g></svg>` },\n    \"info\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/info</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/info\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M9.39999962,8 L10.5999997,8 L10.5999997,15 L9.39999962,15 L9.39999962,8 Z M10,7 C9.44771525,7 9,6.55228475 9,6 C9,5.44771525 9.44771525,5 10,5 C10.5522847,5 11,5.44771525 11,6 C11,6.55228475 10.5522847,7 10,7 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/info</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/info\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_info\" fill=\"#000000\">            <g id=\"Group-19\" transform=\"translate(2.000000, 2.000000)\">                <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M9.25,8 L9.25,15 L10.75,15 L10.75,8 L9.25,8 Z M10,7 C10.5522847,7 11,6.55228475 11,6 C11,5.44771525 10.5522847,5 10,5 C9.44771525,5 9,5.44771525 9,6 C9,6.55228475 9.44771525,7 10,7 Z\" id=\"图标颜色\"></path>            </g>        </g>    </g></svg>` },\n    \"keyboard\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/keyboard</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/keyboard\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_info\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M4.5,6 L6.5,6 L6.5,8 L4.5,8 L4.5,6 Z M7.5,6 L9.5,6 L9.5,8 L7.5,8 L7.5,6 Z M10.5,6 L12.5,6 L12.5,8 L10.5,8 L10.5,6 Z M13.5,6 L15.5,6 L15.5,8 L13.5,8 L13.5,6 Z M4.5,9 L6.5,9 L6.5,11 L4.5,11 L4.5,9 Z M7.5,9 L9.5,9 L9.5,11 L7.5,11 L7.5,9 Z M7,13 L13,13 L13,15 L7,15 L7,13 Z M10.5,9 L12.5,9 L12.5,11 L10.5,11 L10.5,9 Z M13.5,9 L15.5,9 L15.5,11 L13.5,11 L13.5,9 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/keyboard</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/keyboard\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_info\" fill=\"#000000\">            <path d=\"M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z M6.5,8 L6.5,10 L8.5,10 L8.5,8 L6.5,8 Z M9.5,8 L9.5,10 L11.5,10 L11.5,8 L9.5,8 Z M12.5,8 L12.5,10 L14.5,10 L14.5,8 L12.5,8 Z M15.5,8 L15.5,10 L17.5,10 L17.5,8 L15.5,8 Z M6.5,11 L6.5,13 L8.5,13 L8.5,11 L6.5,11 Z M9.5,11 L9.5,13 L11.5,13 L11.5,11 L9.5,11 Z M9,15 L9,17 L15,17 L15,15 L9,15 Z M12.5,11 L12.5,13 L14.5,13 L14.5,11 L12.5,11 Z M15.5,11 L15.5,13 L17.5,13 L17.5,11 L15.5,11 Z\" id=\"Mask\"></path>        </g>    </g></svg>` },\n    \"like\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/like</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/like\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_like\" transform=\"translate(3.000000, 5.000000)\" fill=\"#000000\">            <path d=\"M16.2846386,7.64509528 C17.7287556,6.15675186 17.7118979,3.7815372 16.243355,2.31299423 C14.7593626,0.829001923 12.3533357,0.829001923 10.8693434,2.31299423 C10.6770786,2.50525906 10.4332063,2.74049974 10.1366138,3.0199452 L9.3137085,3.79527533 L8.49080324,3.0199452 C8.1942107,2.74049974 7.95033841,2.50525906 7.75807358,2.31299423 C6.27408127,0.829001923 3.86805435,0.829001923 2.38406204,2.31299423 C0.915537104,3.78151917 0.898583145,6.15687038 2.32967362,7.63261735 L9.313666,14.6166823 L16.2846386,7.64509528 Z M1.53553391,1.46446609 C3.48815536,-0.488155365 6.65398026,-0.488155365 8.60660172,1.46446609 C8.78940843,1.6472728 9.02511069,1.87463262 9.3137085,2.14654555 C9.60230631,1.87463262 9.83800857,1.6472728 10.0208153,1.46446609 C11.9734367,-0.488155365 15.1392616,-0.488155365 17.0918831,1.46446609 C19.0263413,3.39892429 19.0443356,6.5241205 17.145866,8.48073116 L10.0208153,15.6066017 C9.63031143,15.9971464 8.99714645,15.9971796 8.60660172,15.6066757 L1.48114108,8.48114108 C-0.416918598,6.5241205 -0.398924294,3.39892429 1.53553391,1.46446609 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/like</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/like\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_like\" fill=\"#000000\">            <path d=\"M4.53553391,5.77817459 C6.48815536,3.82555313 9.65398026,3.82555313 11.6066017,5.77817459 C11.7894084,5.9609813 12.0251107,6.18834112 12.3137085,6.46025405 C12.6023063,6.18834112 12.8380086,5.9609813 13.0208153,5.77817459 C14.9734367,3.82555313 18.1392616,3.82555313 20.0918831,5.77817459 C22.0263413,7.71263279 22.0443356,10.837829 20.145866,12.7944397 L13.0207783,19.9202732 C12.6303114,20.3108549 11.9971464,20.3108881 11.6066017,19.9203842 C11.6065894,19.9203719 11.606577,19.9203596 11.6066017,19.9203102 L4.48114108,12.7948496 C2.5830814,10.837829 2.60107571,7.71263279 4.53553391,5.77817459 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"link\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/link</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/link\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M14.6568542,9 L13.8083261,8.15147186 L15.9296465,6.03015152 C17.0231145,4.9366835 17.0231145,3.16382156 15.9296465,2.07035354 C14.8361784,0.976885527 13.0633165,0.976885527 11.9698485,2.07035354 L8.08076118,5.95944084 C6.98729317,7.05290886 6.98729317,8.8257708 8.08076118,9.91923882 L7.23223305,10.767767 C5.67013588,9.20566979 5.67013588,6.67300987 7.23223305,5.1109127 L11.1213203,1.22182541 C12.6834175,-0.34027176 15.2160774,-0.34027176 16.7781746,1.22182541 C18.3402718,2.78392257 18.3402718,5.31658249 16.7781746,6.87867966 L14.6568542,9 Z M3.34314575,9 L4.19167389,9.84852814 L2.07035354,11.9698485 C0.976885527,13.0633165 0.976885527,14.8361784 2.07035354,15.9296465 C3.16382156,17.0231145 4.9366835,17.0231145 6.03015152,15.9296465 L9.91923882,12.0405592 C11.0127068,10.9470911 11.0127068,9.1742292 9.91923882,8.08076118 L10.767767,7.23223305 C12.3298641,8.79433021 12.3298641,11.3269901 10.767767,12.8890873 L6.87867966,16.7781746 C5.31658249,18.3402718 2.78392257,18.3402718 1.22182541,16.7781746 C-0.34027176,15.2160774 -0.34027176,12.6834175 1.22182541,11.1213203 L3.34314575,9 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/link</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/link\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M14.6568542,9 L13.2426407,7.58578644 L15.363961,5.46446609 C16.1450096,4.68341751 16.1450096,3.41708755 15.363961,2.63603897 C14.5829124,1.85499039 13.3165825,1.85499039 12.5355339,2.63603897 L8.29289322,6.87867966 C7.51184464,7.65972824 7.51184464,8.9260582 8.29289322,9.70710678 L6.87867966,11.1213203 C5.31658249,9.55922318 5.31658249,7.02656326 6.87867966,5.46446609 L11.1213203,1.22182541 C12.6834175,-0.34027176 15.2160774,-0.34027176 16.7781746,1.22182541 C18.3402718,2.78392257 18.3402718,5.31658249 16.7781746,6.87867966 L14.6568542,9 Z M3.34314575,9 L4.75735931,10.4142136 L2.63603897,12.5355339 C1.85499039,13.3165825 1.85499039,14.5829124 2.63603897,15.363961 C3.41708755,16.1450096 4.68341751,16.1450096 5.46446609,15.363961 L9.70710678,11.1213203 C10.4881554,10.3402718 10.4881554,9.0739418 9.70710678,8.29289322 L11.1213203,6.87867966 C12.6834175,8.44077682 12.6834175,10.9734367 11.1213203,12.5355339 L6.87867966,16.7781746 C5.31658249,18.3402718 2.78392257,18.3402718 1.22182541,16.7781746 C-0.34027176,15.2160774 -0.34027176,12.6834175 1.22182541,11.1213203 L3.34314575,9 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"location\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/location</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/location\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon22\" transform=\"translate(4.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M8.06519014,19.2431663 C8.06300986,19.2412009 8.06085569,19.2393247 8.05872818,19.2375353 L8.06519014,19.2431663 Z M8.24683684,18.9686065 C8.48293324,18.7557774 8.74732343,18.5078114 9.03284437,18.2278923 C9.85063366,17.4261479 10.6688921,16.5335242 11.4301661,15.5768797 C13.4693431,13.0143765 14.7113924,10.487102 14.7954866,8.23968166 C14.7984932,8.15933104 14.8,8.07943664 14.8,8 C14.8,4.2444637 11.7555363,1.2 8,1.2 C4.2444637,1.2 1.2,4.2444637 1.2,8 C1.2,8.07943664 1.20150681,8.15933104 1.20451338,8.23968166 C1.28860758,10.487102 2.5306569,13.0143765 4.56983386,15.5768797 C5.33110795,16.5335242 6.14936634,17.4261479 6.96715563,18.2278923 C7.25267657,18.5078114 7.51706676,18.7557774 7.75316316,18.9686065 C7.86349262,19.068063 7.94697177,19.1413912 8,19.1870148 C8.05302823,19.1413912 8.13650738,19.068063 8.24683684,18.9686065 Z M7.26171875,20.1344765 C7.26171875,20.1344765 0,14.018278 0,8 C0,3.581722 3.581722,0 8,0 C12.418278,0 16,3.581722 16,8 C16,14.018278 8.73828125,20.1344765 8.73828125,20.1344765 C8.33356488,20.5060199 7.66946023,20.502035 7.26171875,20.1344765 Z M8,10.8 C9.5463973,10.8 10.8,9.5463973 10.8,8 C10.8,6.4536027 9.5463973,5.2 8,5.2 C6.4536027,5.2 5.2,6.4536027 5.2,8 C5.2,9.5463973 6.4536027,10.8 8,10.8 Z M8,12 C5.790861,12 4,10.209139 4,8 C4,5.790861 5.790861,4 8,4 C10.209139,4 12,5.790861 12,8 C12,10.209139 10.209139,12 8,12 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/location</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/location\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon22\" fill=\"#000000\">            <path d=\"M11.2617188,22.1344765 C11.2617188,22.1344765 4,16.018278 4,10 C4,5.581722 7.581722,2 12,2 C16.418278,2 20,5.581722 20,10 C20,16.018278 12.7382812,22.1344765 12.7382812,22.1344765 C12.3335649,22.5060199 11.6694602,22.502035 11.2617188,22.1344765 Z M12,13.5 C13.9329966,13.5 15.5,11.9329966 15.5,10 C15.5,8.06700338 13.9329966,6.5 12,6.5 C10.0670034,6.5 8.5,8.06700338 8.5,10 C8.5,11.9329966 10.0670034,13.5 12,13.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"lock\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/lock</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/lock\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon37\" transform=\"translate(4.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M4,7 L4,4 C4,1.790861 5.790861,0 8,0 C10.209139,0 12,1.790861 12,4 L12,7 L14.9991283,7 C15.5518945,7 16,7.44748943 16,7.99850233 L16,19.0014977 C16,19.5529553 15.5553691,20 14.9991283,20 L1.00087166,20 C0.448105505,20 0,19.5525106 0,19.0014977 L0,7.99850233 C0,7.44704472 0.444630861,7 1.00087166,7 L4,7 Z M5.20000005,7 L10.7999992,7 L10.7999992,4 C10.7999969,2.45359963 9.54639417,1.19999695 8,1.19999695 C6.45359963,1.19999695 5.19999695,2.45359963 5.19999695,4 L5.20000005,7 Z M1.2,8.2 L1.2,18.8 L14.8,18.8 L14.8,8.2 L1.2,8.2 Z M7.39999962,13.8751867 C6.87022839,13.6437197 6.5,13.1150956 6.5,12.5 C6.5,11.6715729 7.17157288,11 8,11 C8.82842712,11 9.5,11.6715729 9.5,12.5 C9.5,13.1150958 9.12977128,13.6437201 8.59999967,13.875187 L8.59999967,16 L7.39999962,16 L7.39999962,13.8751867 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/lock</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/lock\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon37\" fill=\"#000000\">            <path d=\"M7.5,9 L7.5,6.5 C7.5,4.01471863 9.51471863,2 12,2 C14.4852814,2 16.5,4.01471863 16.5,6.5 L16.5,9 L18.9991283,9 C19.5518945,9 20,9.44748943 20,9.99850233 L20,21.0014977 C20,21.5529553 19.5553691,22 18.9991283,22 L5.00087166,22 C4.4481055,22 4,21.5525106 4,21.0014977 L4,9.99850233 C4,9.44704472 4.44463086,9 5.00087166,9 L7.5,9 Z M9,9 L15,9 L15,6.5 C15,4.84314575 13.6568542,3.5 12,3.5 C10.3431458,3.5 9,4.84314575 9,6.5 L9,9 Z M11.3999996,15.8751867 L11.3999996,18 L12.5999997,18 L12.5999997,15.875187 C13.1297713,15.6437201 13.5,15.1150958 13.5,14.5 C13.5,13.6715729 12.8284271,13 12,13 C11.1715729,13 10.5,13.6715729 10.5,14.5 C10.5,15.1150956 10.8702284,15.6437197 11.3999996,15.8751867 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"max-window\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/max-window</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/max-window\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Max-icon\" transform=\"translate(3.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M18,14 L18,18 C18,18.5522847 17.5522847,19 17,19 L13,19 L13,17.8 L16.8,17.8 L16.8,14 L18,14 Z M5,1 L5,2.2 L1.2,2.2 L1.2,6 L0,6 L0,2 C0,1.44771525 0.44771525,1 1,1 L5,1 Z M16.7968544,3.04562642 L11.3249201,8.51756067 L10.4763919,7.6690325 L15.9483176,2.19710685 L12.9968544,2.19710685 L12.9968544,0.997106803 L16.9968544,0.997106803 C17.5491392,0.997106803 17.9968544,1.44482205 17.9968544,1.9971068 L17.9968544,5.9971068 L16.7968544,5.9971068 L16.7968544,3.04562642 Z M1.20314565,16.9543736 L6.67507989,11.4824393 L7.52360806,12.3309675 L2.05168241,17.8028931 L5.0031456,17.8028931 L5.0031456,19.0028932 L1.0031456,19.0028932 C0.450860848,19.0028932 0.00314559792,18.5551779 0.00314559792,18.0028932 L0.00314559792,14.0028932 L1.20314565,14.0028932 L1.20314565,16.9543736 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/max-window</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/max-window\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Max-icon\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M18,12 L18,17 C18,17.5522847 17.5522847,18 17,18 L12,18 L12,16 L16,16 L16,12 L18,12 Z M6,0 L6,2 L2,2 L2,6 L0,6 L0,1 C0,0.44771525 0.44771525,0 1,0 L6,0 Z M14.5839613,2 L12,2 L12,0 L17,0 C17.5522847,0 18,0.44771525 18,1 L18,6 L16,6 L16,3.41364079 L11.6342138,7.77817459 L10.2200003,6.36396103 L14.5839613,2 Z M3.4160387,15.9981749 L6,15.9981749 L6,17.9981749 L1,17.9981749 C0.44771525,17.9981749 0,17.5504596 0,16.9981749 L0,11.9981749 L2,11.9981749 L2,14.5845341 L6.36578617,10.2200003 L7.77999973,11.6342138 L3.4160387,15.9981749 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"me\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/me</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/me\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon11\" transform=\"translate(2.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M18.3,16.8 L18.3,16.3154633 C18.3,16.0860594 18.064679,15.7100199 17.8598095,15.6100873 L12.1994561,12.8490401 C10.6728743,12.1043932 10.2955728,10.302913 11.3893366,9.00636847 L11.7508692,8.57780877 C12.302195,7.92426863 12.8,6.56439093 12.8,5.71018568 L12.8,4.00020747 C12.8,2.4549142 11.5455898,1.2 10,1.2 C8.45630885,1.2 7.2,2.4552027 7.2,3.99958038 L7.2,5.70929053 C7.2,6.56566389 7.69574673,7.92048381 8.24907842,8.57631176 L8.61061095,9.00481267 C9.70663642,10.3038601 9.32521432,12.1036503 7.80071945,12.8475869 L2.1403663,15.6097766 C1.93701709,15.7090088 1.7,16.0886771 1.7,16.3154633 L1.7,16.8 L18.3,16.8 Z M0.5,17 L0.5,16.3154633 C0.5,15.6303744 0.998150907,14.8319079 1.61409761,14.5313327 L7.27445076,11.769143 C8.09537712,11.36854 8.28625906,10.4812624 7.69344522,9.7786389 L7.33191269,9.35013798 C6.59631763,8.47828515 6,6.84949648 6,5.70929053 L6,3.99958038 C6,1.79067313 7.79535615,0 10,0 C12.209139,0 14,1.79298022 14,4.00020747 L14,5.71018568 C14,6.84929595 13.4009324,8.48286035 12.6680872,9.35157303 L12.3065546,9.78013273 C11.7170324,10.4789507 11.9011877,11.3683976 12.725549,11.7705104 L18.3859024,14.5315576 C19.0012015,14.8316925 19.5,15.6251701 19.5,16.3154633 L19.5,17 C19.5,17.5522847 19.0522847,18 18.5,18 L1.5,18 C0.94771525,18 0.5,17.5522847 0.5,17 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/me</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/me\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon11\" fill=\"#000000\">            <path d=\"M2.5,20 L2.5,19.3154633 C2.5,18.6303744 2.99815091,17.8319079 3.61409761,17.5313327 L9.27445076,14.769143 C10.0953771,14.36854 10.2862591,13.4812624 9.69344522,12.7786389 L9.33191269,12.350138 C8.59631763,11.4782852 8,9.84949648 8,8.70929053 L8,6.99958038 C8,4.79067313 9.79535615,3 12,3 C14.209139,3 16,4.79298022 16,7.00020747 L16,8.71018568 C16,9.84929595 15.4009324,11.4828603 14.6680872,12.351573 L14.3065546,12.7801327 C13.7170324,13.4789507 13.9011877,14.3683976 14.725549,14.7705104 L20.3859024,17.5315576 C21.0012015,17.8316925 21.5,18.6251701 21.5,19.3154633 L21.5,20 C21.5,20.5522847 21.0522847,21 20.5,21 L3.5,21 C2.94771525,21 2.5,20.5522847 2.5,20 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"mike\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/mike</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/mike\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(4.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M4.7,4.5 L4.7,10.5 C4.7,12.3225397 6.17746033,13.8 8,13.8 C9.82253967,13.8 11.3,12.3225397 11.3,10.5 L11.3,4.5 C11.3,2.67746033 9.82253967,1.2 8,1.2 C6.17746033,1.2 4.7,2.67746033 4.7,4.5 Z M8.59999967,17.9763496 L8.59999967,21 L7.39999962,21 L7.39999962,17.9763495 C3.53839884,17.670687 0.5,14.4401715 0.5,10.5 L0.5,9 L1.7,9 L1.7,10.5 C1.7,13.9793939 4.52060608,16.8 8,16.8 C11.4793939,16.8 14.3,13.9793939 14.3,10.5 L14.3,9 L15.5,9 L15.5,10.5 C15.5,14.4401718 12.4616008,17.6706874 8.59999967,17.9763496 Z M3.5,4.5 C3.5,2.01471863 5.51471863,0 8,0 C10.4852814,0 12.5,2.01471863 12.5,4.5 L12.5,10.5 C12.5,12.9852814 10.4852814,15 8,15 C5.51471863,15 3.5,12.9852814 3.5,10.5 L3.5,4.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/mike</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/mike\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" fill=\"#000000\">            <path d=\"M12.75,18.9602923 L12.75,22 L11.25,22 L11.25,18.9602923 C7.736675,18.5860629 5,15.6126238 5,12 L5,10 L6.5,10 L6.5,12 C6.5,15.0375661 8.96243388,17.5 12,17.5 C15.0375661,17.5 17.5,15.0375661 17.5,12 L17.5,10 L19,10 L19,12 C19,15.6126238 16.263325,18.5860629 12.75,18.9602923 Z M8,6 C8,3.790861 9.790861,2 12,2 C14.209139,2 16,3.790861 16,6 L16,12 C16,14.209139 14.209139,16 12,16 C9.790861,16 8,14.209139 8,12 L8,6 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"mike2\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/mike2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/mike2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,5.7 C9.28202983,5.7 8.7,6.28202983 8.7,7 L8.7,10.5 C8.7,11.2179702 9.28202983,11.8 10,11.8 C10.7179702,11.8 11.3,11.2179702 11.3,10.5 L11.3,7 C11.3,6.28202983 10.7179702,5.7 10,5.7 Z M10.6000245,14.9603384 L10.6000245,16.5 L9.40002441,16.5 L9.40002441,14.9603399 C7.19839688,14.6669239 5.5,12.7811214 5.5,10.4975018 L5.5,9 L6.7,9 L6.7,10.4975018 C6.7,12.3219031 8.17739974,13.8 10,13.8 C11.8227257,13.8 13.3,12.3217816 13.3,10.4975018 L13.3,9 L14.5,9 L14.5,10.4975018 C14.5,12.7806453 12.8020307,14.6668791 10.6000245,14.9603384 L10.6000245,14.9603384 Z M10,4.5 C11.3807119,4.5 12.5,5.61928813 12.5,7 L12.5,10.5 C12.5,11.8807119 11.3807119,13 10,13 C8.61928813,13 7.5,11.8807119 7.5,10.5 L7.5,7 C7.5,5.61928813 8.61928813,4.5 10,4.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/mike2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/mike2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon24\" fill=\"#000000\">            <path d=\"M12.6000245,16.4603384 C14.8020307,16.1668791 16.5,14.2806453 16.5,11.9975018 L16.5,10.5 L15.3,10.5 L15.3,11.9975018 C15.3,13.8217816 13.8227257,15.3 12,15.3 C10.1773997,15.3 8.7,13.8219031 8.7,11.9975018 L8.7,10.5 L7.5,10.5 L7.5,11.9975018 C7.5,14.2811214 9.19839688,16.1669239 11.4000244,16.4603399 L11.4000244,18 L12.6000245,18 L12.6000245,16.4603384 Z M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z M12,6.5 C10.8954305,6.5 10,7.3954305 10,8.5 L10,12 C10,13.1045695 10.8954305,14 12,14 C13.1045695,14 14,13.1045695 14,12 L14,8.5 C14,7.3954305 13.1045695,6.5 12,6.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"mobile-contacts\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/mobile-contacts</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/mobile-contacts\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(4.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M0,1 C0,0.44771525 0.44771525,0 1,0 L15,0 C15.5522847,0 16,0.44771525 16,1 L16,19 C16,19.5522847 15.5522847,20 15,20 L1,20 C0.44771525,20 0,19.5522847 0,19 L0,1 Z M1.2,1.2 L1.2,18.8 L14.8,18.8 L14.8,1.2 L1.2,1.2 Z M10.9093627,11.3061065 L12.6521261,11.9605864 C12.852621,12.0452838 12.9837138,12.2377779 12.9991365,12.4687708 C13.0068479,12.561168 12.9605798,12.6689647 12.9528685,12.692064 C12.6752601,13.4466408 11.9581053,13.9856243 11.1098576,13.9856243 C10.870806,13.9856243 10.6471771,13.931726 10.5931977,13.9163264 C8.97381581,13.5467378 7.5317948,12.722863 6.39822747,11.5909978 C5.26466015,10.4591325 4.43954651,9.01927668 4.06940208,7.40232629 C4.06169074,7.34842795 4,7.1251348 4,6.88644212 C4,6.03946811 4.53979396,5.32339008 5.29550551,5.04619858 C5.31863954,5.03849882 5.42659833,5 5.51913444,5 C5.75047471,5.00769976 5.94325827,5.13859575 6.02808304,5.33878961 L6.68354714,7.07893621 C6.71439251,7.16363362 6.69896982,7.2098322 6.65270177,7.2945296 C6.49847492,7.56402133 6.12833049,8.24160054 5.92012424,8.64968802 C5.86614485,8.74978495 5.83529948,8.86528141 5.83529948,8.98077786 C5.83529948,9.10397408 5.87385619,9.2271703 5.93554693,9.32726723 C6.26713465,9.88934999 6.65270177,10.4206337 7.10767097,10.8749197 C7.56264017,11.3369056 8.09472279,11.7218938 8.65765078,12.0529836 C8.75789823,12.1145817 8.87356836,12.1530805 9.00466118,12.1530805 C9.12804266,12.1530805 9.23600145,12.1222815 9.33624891,12.0683831 C9.73723871,11.8604895 10.4158368,11.4909008 10.6934452,11.3369056 C10.7782699,11.290707 10.8168266,11.2753075 10.9093627,11.3061065 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/mobile-contacts</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/mobile-contacts\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" fill=\"#000000\">            <path d=\"M4,3 C4,2.44771525 4.44771525,2 5,2 L19,2 C19.5522847,2 20,2.44771525 20,3 L20,21 C20,21.5522847 19.5522847,22 19,22 L5,22 C4.44771525,22 4,21.5522847 4,21 L4,3 Z M14.9093627,13.8061065 C14.8168266,13.7753075 14.7782699,13.790707 14.6934452,13.8369056 C14.4158368,13.9909008 13.7372387,14.3604895 13.3362489,14.5683831 C13.2360015,14.6222815 13.1280427,14.6530805 13.0046612,14.6530805 C12.8735684,14.6530805 12.7578982,14.6145817 12.6576508,14.5529836 C12.0947228,14.2218938 11.5626402,13.8369056 11.107671,13.3749197 C10.6527018,12.9206337 10.2671347,12.38935 9.93554693,11.8272672 C9.87385619,11.7271703 9.83529948,11.6039741 9.83529948,11.4807779 C9.83529948,11.3652814 9.86614485,11.2497849 9.92012424,11.149688 C10.1283305,10.7416005 10.4984749,10.0640213 10.6527018,9.7945296 C10.6989698,9.7098322 10.7143925,9.66363362 10.6835471,9.57893621 L10.028083,7.83878961 C9.94325827,7.63859575 9.75047471,7.50769976 9.51913444,7.5 C9.42659833,7.5 9.31863954,7.53849882 9.29550551,7.54619858 C8.53979396,7.82339008 8,8.53946811 8,9.38644212 C8,9.6251348 8.06169074,9.84842795 8.06940208,9.90232629 C8.43954651,11.5192767 9.26466015,12.9591325 10.3982275,14.0909978 C11.5317948,15.222863 12.9738158,16.0467378 14.5931977,16.4163264 C14.6471771,16.431726 14.870806,16.4856243 15.1098576,16.4856243 C15.9581053,16.4856243 16.6752601,15.9466408 16.9528685,15.192064 C16.9605798,15.1689647 17.0068479,15.061168 16.9991365,14.9687708 C16.9837138,14.7377779 16.852621,14.5452838 16.6521261,14.4605864 L14.9093627,13.8061065 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"more\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/more</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/more\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(3.000000, 10.000000)\" fill=\"#000000\">            <path d=\"M3.75,2 C3.75,2.96635 2.96635,3.75 2,3.75 C1.03365,3.75 0.25,2.96635 0.25,2 C0.25,1.0333 1.03365,0.25 2,0.25 C2.96635,0.25 3.75,1.0333 3.75,2 Z M9,0.25 C9.96635,0.25 10.75,1.0333 10.75,2 C10.75,2.96635 9.96635,3.75 9,3.75 C8.03365,3.75 7.25,2.96635 7.25,2 C7.25,1.0333 8.03365,0.25 9,0.25 Z M16,0.25 C16.96635,0.25 17.75,1.0333 17.75,2 C17.75,2.96635 16.96635,3.75 16,3.75 C15.03365,3.75 14.25,2.96635 14.25,2 C14.25,1.0333 15.03365,0.25 16,0.25 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/more</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/more\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_more\" fill=\"#000000\">            <path d=\"M7,12 C7,13.1044 6.1044,14 5,14 C3.8956,14 3,13.1044 3,12 C3,10.8952 3.8956,10 5,10 C6.1044,10 7,10.8952 7,12 Z M12,10 C13.1044,10 14,10.8952 14,12 C14,13.1044 13.1044,14 12,14 C10.8956,14 10,13.1044 10,12 C10,10.8952 10.8956,10 12,10 Z M19,10 C20.1044,10 21,10.8952 21,12 C21,13.1044 20.1044,14 19,14 C17.8956,14 17,13.1044 17,12 C17,10.8952 17.8956,10 19,10 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"more2\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/more2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/more2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M10,11 C9.44771525,11 9,10.5522847 9,10 C9,9.44771525 9.44771525,9 10,9 C10.5522847,9 11,9.44771525 11,10 C11,10.5522847 10.5522847,11 10,11 Z M14,11 C13.4477153,11 13,10.5522847 13,10 C13,9.44771525 13.4477153,9 14,9 C14.5522847,9 15,9.44771525 15,10 C15,10.5522847 14.5522847,11 14,11 Z M6,11 C5.44771525,11 5,10.5522847 5,10 C5,9.44771525 5.44771525,9 6,9 C6.55228475,9 7,9.44771525 7,10 C7,10.5522847 6.55228475,11 6,11 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/more2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/more2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_miniprogram\" fill=\"#000000\">            <path d=\"M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z M12,13.5 C12.8284271,13.5 13.5,12.8284271 13.5,12 C13.5,11.1715729 12.8284271,10.5 12,10.5 C11.1715729,10.5 10.5,11.1715729 10.5,12 C10.5,12.8284271 11.1715729,13.5 12,13.5 Z M16.5,13.5 C17.3284271,13.5 18,12.8284271 18,12 C18,11.1715729 17.3284271,10.5 16.5,10.5 C15.6715729,10.5 15,11.1715729 15,12 C15,12.8284271 15.6715729,13.5 16.5,13.5 Z M7.5,13.5 C8.32842712,13.5 9,12.8284271 9,12 C9,11.1715729 8.32842712,10.5 7.5,10.5 C6.67157288,10.5 6,11.1715729 6,12 C6,12.8284271 6.67157288,13.5 7.5,13.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"mosaic\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/mosaic</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/mosaic\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"图标颜色\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M8,12 L10,12 L10,14 L8,14 L8,12 Z M4,12 L6,12 L6,14 L4,14 L4,12 Z M12,12 L14,12 L14,14 L12,14 L12,12 Z M12,4 L14,4 L14,6 L12,6 L12,4 Z M4,8 L6,8 L6,10 L4,10 L4,8 Z M4,4 L6,4 L6,6 L4,6 L4,4 Z M6,10 L8,10 L8,12 L6,12 L6,10 Z M6,6 L8,6 L8,8 L6,8 L6,6 Z M10,10 L12,10 L12,12 L10,12 L10,10 Z M10,6 L12,6 L12,8 L10,8 L10,6 Z M8,4 L10,4 L10,6 L8,6 L8,4 Z M8,8 L10,8 L10,10 L8,10 L8,8 Z M12,8 L14,8 L14,10 L12,10 L12,8 Z M1.2,1.2 L1.2,16.8 L16.8,16.8 L16.8,1.2 L1.2,1.2 Z M1,0 L17,0 C17.5522847,0 18,0.44771525 18,1 L18,17 C18,17.5522847 17.5522847,18 17,18 L1,18 C0.44771525,18 0,17.5522847 0,17 L0,1 C0,0.44771525 0.44771525,0 1,0 Z\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/mask</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/mask\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M1,0 L17,0 C17.5522847,-1.01453063e-16 18,0.44771525 18,1 L18,17 C18,17.5522847 17.5522847,18 17,18 L1,18 C0.44771525,18 6.76353751e-17,17.5522847 0,17 L0,1 C-6.76353751e-17,0.44771525 0.44771525,1.01453063e-16 1,0 Z M7.80000019,12.6000004 L7.80000019,15.0000005 L10.2000003,15.0000005 L10.2000003,12.6000004 L7.80000019,12.6000004 Z M3,12.6000004 L3,15.0000005 L5.4000001,15.0000005 L5.4000001,12.6000004 L3,12.6000004 Z M12.6000004,12.6000004 L12.6000004,15.0000005 L15.0000005,15.0000005 L15.0000005,12.6000004 L12.6000004,12.6000004 Z M12.6000004,3 L12.6000004,5.4000001 L15.0000005,5.4000001 L15.0000005,3 L12.6000004,3 Z M3,7.80000019 L3,10.2000003 L5.4000001,10.2000003 L5.4000001,7.80000019 L3,7.80000019 Z M3,3 L3,5.4000001 L5.4000001,5.4000001 L5.4000001,3 L3,3 Z M5.4000001,10.2000003 L5.4000001,12.6000004 L7.80000019,12.6000004 L7.80000019,10.2000003 L5.4000001,10.2000003 Z M5.4000001,5.4000001 L5.4000001,7.80000019 L7.80000019,7.80000019 L7.80000019,5.4000001 L5.4000001,5.4000001 Z M10.2000003,10.2000003 L10.2000003,12.6000004 L12.6000004,12.6000004 L12.6000004,10.2000003 L10.2000003,10.2000003 Z M10.2000003,5.4000001 L10.2000003,7.80000019 L12.6000004,7.80000019 L12.6000004,5.4000001 L10.2000003,5.4000001 Z M7.80000019,3 L7.80000019,5.4000001 L10.2000003,5.4000001 L10.2000003,3 L7.80000019,3 Z M7.80000019,7.80000019 L7.80000019,10.2000003 L10.2000003,10.2000003 L10.2000003,7.80000019 L7.80000019,7.80000019 Z M12.6000004,7.80000019 L12.6000004,10.2000003 L15.0000005,10.2000003 L15.0000005,7.80000019 L12.6000004,7.80000019 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"music-off\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/music_off</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/music_off\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_music\" fill=\"#000000\">            <path d=\"M7.53207892,4.83502207 L18.8772863,2.34318067 C19.2025252,2.27476488 19.5226771,2.47930633 19.5972863,2.80318067 C19.605581,2.84598886 19.6089363,2.88960748 19.6072863,2.93318067 L19.6072863,16.5831807 C19.6038814,16.6843639 19.594782,16.7844909 19.580239,16.8831821 L22.4249789,19.7279221 L21.5764507,20.5764502 L4.84852868,3.84852817 L5.69705685,3 L7.53207892,4.83502207 Z M17.3893408,14.692284 L17.6672863,14.6331807 C18.0911755,14.5476455 18.396326,14.1756127 18.3972863,13.7431807 L18.3972863,3.83318067 L8.66738839,5.97033154 L17.3893408,14.692284 L17.3893408,14.692284 Z M6.40728625,7.1043431 L7.60728625,8.3043431 L7.60728625,19.2031807 C7.58608355,20.213505 6.9983734,21.1260023 6.08728625,21.5631807 C5.90728625,21.6431807 4.85728625,21.8831807 4.78728625,21.8831807 C4.66102239,21.8974666 4.53355012,21.8974666 4.40728625,21.8831807 C3.32225343,21.8373813 2.45308559,20.9682135 2.40728625,19.8831807 C2.3216979,18.8458811 2.99829854,17.8986402 4.00728625,17.6431807 L5.67728625,17.2931807 C6.10332728,17.2112417 6.41027368,16.8370194 6.40728625,16.4031807 L6.40728625,7.1043431 L6.40728625,7.1043431 Z M14.9201196,15.6171765 L15.7639875,16.4610444 C15.6205529,16.6523256 15.5467342,16.8934569 15.5672863,17.1431807 C15.5788722,17.5942966 15.9193125,17.9687809 16.3672863,18.0231807 L16.5172863,18.0231807 C16.6128978,18.0052535 16.9120521,17.9409043 17.1800217,17.8770786 L18.1670541,18.8641109 C18.134238,18.8811052 18.1009781,18.8974682 18.0672863,18.9131807 C17.636529,19.0454344 17.1992916,19.1555782 16.7572863,19.2431807 C16.6277067,19.2579667 16.4968658,19.2579667 16.3672863,19.2431807 C15.2843027,19.1927286 14.4177383,18.3261642 14.3672863,17.2431807 C14.3136552,16.6295529 14.5272058,16.0455188 14.9201196,15.6171765 L14.9201196,15.6171765 Z M6.40728625,18.3031807 C6.25171355,18.382502 6.08721189,18.4429312 5.91728625,18.4831807 L4.19728625,18.8231807 C3.80742967,18.9965193 3.57048788,19.3981156 3.60728625,19.8231807 C3.60649702,20.0665755 3.70770255,20.2991715 3.88633215,20.4644989 C4.06496176,20.6298263 4.30467933,20.7127655 4.54728625,20.6931807 C4.69728625,20.6531807 5.42728625,20.4931807 5.61728625,20.4331807 C6.077472,20.1894078 6.37699373,19.7230638 6.40728625,19.2031807 L6.40728625,18.3031807 Z\" id=\"Shape\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/music-off</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/music-off\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_music\" fill=\"#000000\">            <path d=\"M9.33073588,6.20941554 L17.6563348,14.5350145 C17.8692631,14.3487944 18,14.0758571 18,13.7782081 L18,4.30884616 L9.33073588,6.20941554 Z M19.5,16.3786797 L22.0918831,18.9705627 L21.0312229,20.0312229 L4.06066017,3.06066017 L5.12132034,2 L7.95778239,4.83646204 L18.8930356,2.44165489 C19.1627851,2.38258008 19.4293498,2.55336564 19.4884246,2.82311512 C19.4961191,2.8582498 19.5,2.89411216 19.5,2.93007952 L19.5,16.3786797 Z M8,9.12132034 L8,19.2012686 C8,20.1376561 7.37291357,21.0506958 6.5294712,21.4440654 C6.37267856,21.5171912 5.382193,21.7385747 5.25286076,21.7645934 C4.01016532,22.0145956 3.05534487,20.9501591 3.00276162,19.8737811 C2.95017837,18.7974031 3.65606327,17.8998615 4.47506962,17.7350959 L5.73958069,17.4178208 C6.18656759,17.3056685 6.5,16.9038781 6.5,16.443036 L6.5,7.62132034 L8,9.12132034 Z M17.7441316,18.8654519 C17.3884565,18.959172 16.824758,19.0835157 16.7290072,19.1026128 C15.4755213,19.352615 14.5124101,18.2881785 14.4593703,17.2118005 C14.4354581,16.7265322 14.5670444,16.2776127 14.7944808,15.9158011 L17.7441316,18.8654519 Z\" id=\"Mask\"></path>        </g>    </g></svg>` },\n    \"music\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/music</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/music\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_music\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M17.5972863,0.803180666 C17.5226771,0.479306335 17.2025252,0.27476488 16.8772863,0.343180666 L5.26728625,2.89318067 C4.75103261,3.00829488 4.38979938,3.47453776 4.40728625,4.00318067 L4.40728625,14.4031807 C4.41027368,14.8370194 4.10332728,15.2112417 3.67728625,15.2931807 L2.00728625,15.6431807 C0.998298543,15.8986402 0.321697899,16.8458811 0.407286253,17.8831807 C0.453085593,18.9682135 1.32225343,19.8373813 2.40728625,19.8831807 C2.53355012,19.8974666 2.66102239,19.8974666 2.78728625,19.8831807 C2.85728625,19.8831807 3.90728625,19.6431807 4.08728625,19.5631807 C4.9983734,19.1260023 5.58608355,18.213505 5.60728625,17.2031807 L5.60728625,4.20318067 L16.3972863,1.83318067 L16.3972863,11.7431807 C16.396326,12.1756127 16.0911755,12.5476455 15.6672863,12.6331807 L13.9272863,13.0031807 C12.9343035,13.274758 12.277654,14.2176393 12.3672863,15.2431807 C12.4177383,16.3261642 13.2843027,17.1927286 14.3672863,17.2431807 C14.4968658,17.2579667 14.6277067,17.2579667 14.7572863,17.2431807 C15.1992916,17.1555782 15.636529,17.0454344 16.0672863,16.9131807 C16.978293,16.488326 17.5734799,15.5878159 17.6072863,14.5831807 L17.6072863,0.933180666 C17.6089363,0.889607483 17.605581,0.84598886 17.5972863,0.803180666 Z M16.4072863,13.6431807 L16.4072863,14.5431807 C16.3734998,15.0621621 16.0697874,15.5253236 15.6072863,15.7631807 C15.4072863,15.8331807 14.6772863,15.9931807 14.5172863,16.0231807 L14.3672863,16.0231807 C13.9193125,15.9687809 13.5788722,15.5942966 13.5672863,15.1431807 C13.5321017,14.7156597 13.7735044,14.3133218 14.1672863,14.1431807 L15.9072863,13.7931807 C16.0792293,13.7628381 16.2470352,13.7124964 16.4072863,13.6431807 Z M4.40728625,16.3031807 L4.40728625,17.2031807 C4.37699373,17.7230638 4.077472,18.1894078 3.61728625,18.4331807 C3.42728625,18.4931807 2.69728625,18.6531807 2.54728625,18.6931807 C2.30467933,18.7127655 2.06496176,18.6298263 1.88633215,18.4644989 C1.70770255,18.2991715 1.60649702,18.0665755 1.60728625,17.8231807 C1.57048788,17.3981156 1.80742967,16.9965193 2.19728625,16.8231807 L3.91728625,16.4831807 C4.08721189,16.4429312 4.25171355,16.382502 4.40728625,16.3031807 L4.40728625,16.3031807 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/music</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/music\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_music\" fill=\"#000000\">            <path d=\"M18,4.30884616 L8,6.50115378 L8,18.1957627 L8,19.2012686 C8,20.1376561 7.37291357,21.0506958 6.5294712,21.4440654 C6.37267856,21.5171912 5.382193,21.7385747 5.25286076,21.7645934 C4.01016532,22.0145956 3.05534487,20.9501591 3.00276162,19.8737811 C2.95017837,18.7974031 3.65606327,17.8998615 4.47506962,17.7350959 L5.73958069,17.4178208 C6.18656759,17.3056685 6.5,16.9038781 6.5,16.443036 L6.5,6.82999992 L6.5,5.96041523 C6.5,5.49056505 6.8270984,5.08408046 7.2860712,4.98356598 L18.8930356,2.44165489 C19.1627851,2.38258008 19.4293498,2.55336564 19.4884246,2.82311512 C19.4961191,2.8582498 19.5,2.89411216 19.5,2.93007952 L19.5,3.73369813 L19.5,15.5337821 L19.5,16.5392879 C19.5,17.4756754 18.8674685,18.3887152 18.0167025,18.7820848 C17.8585484,18.8552106 16.8594624,19.0765941 16.7290072,19.1026128 C15.4755213,19.352615 14.5124101,18.2881785 14.4593703,17.2118005 C14.4063304,16.1354225 15.1183446,15.2378809 15.9444624,15.0731153 L17.23615,14.7538472 C17.6848085,14.6429517 18,14.2403684 18,13.7782081 L18,4.30884616 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"note\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/note</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/note\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(4.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M4.20000005,1.2 L4.20000005,15.8092926 L14,15.8092926 C14.4418278,15.8092926 14.8,15.4511204 14.8,15.0092926 L14.8,13.2000122 L14.8,2 C14.8,1.5581722 14.4418278,1.2 14,1.2 L4.20000005,1.2 Z M3,1.2 L1.2,1.2 L1.2,15.8092926 L3,15.8092926 L3,1.2 Z M14.8,16.8428752 C14.5550151,16.9499136 14.2844419,17.0092926 14,17.0092926 L1.2,17.0092926 L1.2,18.8 L14,18.8 C14.4418278,18.8 14.8,18.4418278 14.8,18 L14.8,16.8428752 Z M0,0 L14,0 C15.1045695,0 16,0.8954305 16,2 L16,18 C16,19.1045695 15.1045695,20 14,20 L0,20 L0,0 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/note</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/note\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(4.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M14.5,16.9462839 C14.34019,16.9874161 14.1726498,17.0092926 14,17.0092926 L1.5,17.0092926 L1.5,18.5 L14,18.5 C14.2761424,18.5 14.5,18.2761424 14.5,18 L14.5,16.9462839 L14.5,16.9462839 Z M0,0 L14,0 C15.1045695,0 16,0.8954305 16,2 L16,18 C16,19.1045695 15.1045695,20 14,20 L0,20 L0,0 Z M3,1.5 L3,15.5 L4.5,15.5 L4.5,1.5 L3,1.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"pad\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/pad</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/pad\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" fill=\"#000000\">            <path d=\"M5.2,3.2 L5.2,20.8 L18.8,20.8 L18.8,3.2 L5.2,3.2 Z M4,3 C4,2.44771525 4.44771525,2 5,2 L19,2 C19.5522847,2 20,2.44771525 20,3 L20,21 C20,21.5522847 19.5522847,22 19,22 L5,22 C4.44771525,22 4,21.5522847 4,21 L4,3 Z M12,20 C11.4477153,20 11,19.5522847 11,19 C11,18.4477153 11.4477153,18 12,18 C12.5522847,18 13,18.4477153 13,19 C13,19.5522847 12.5522847,20 12,20 Z\" id=\"Combined-Shape\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/pad</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/pad\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" fill=\"#000000\">            <path d=\"M4,3 C4,2.44771525 4.44771525,2 5,2 L19,2 C19.5522847,2 20,2.44771525 20,3 L20,21 C20,21.5522847 19.5522847,22 19,22 L5,22 C4.44771525,22 4,21.5522847 4,21 L4,3 Z M12,20 C12.5522847,20 13,19.5522847 13,19 C13,18.4477153 12.5522847,18 12,18 C11.4477153,18 11,18.4477153 11,19 C11,19.5522847 11.4477153,20 12,20 Z\" id=\"形状结合\"></path>        </g>    </g></svg>` },\n    \"pause\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/pause</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/pause\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" fill=\"#000000\">            <path d=\"M7,5 L9,5 C9.55228475,5 10,5.41786757 10,5.93333333 L10,18.0666667 C10,18.5821324 9.55228475,19 9,19 L7,19 C6.44771525,19 6,18.5821324 6,18.0666667 L6,5.93333333 C6,5.41786757 6.44771525,5 7,5 Z M7.2,17.8 L8.8,17.8 L8.8,6.2 L7.2,6.2 L7.2,17.8 Z M15,5 L17,5 C17.5522847,5 18,5.41786757 18,5.93333333 L18,18.0666667 C18,18.5821324 17.5522847,19 17,19 L15,19 C14.4477153,19 14,18.5821324 14,18.0666667 L14,5.93333333 C14,5.41786757 14.4477153,5 15,5 Z M15.2,17.8 L16.8,17.8 L16.8,6.2 L15.2,6.2 L15.2,17.8 Z\" id=\"形状结合\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/pause</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/pause\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" fill=\"#000000\">            <path d=\"M7,5 L9,5 C9.55228475,5 10,5.41786757 10,5.93333333 L10,18.0666667 C10,18.5821324 9.55228475,19 9,19 L7,19 C6.44771525,19 6,18.5821324 6,18.0666667 L6,5.93333333 C6,5.41786757 6.44771525,5 7,5 Z M15,5 L17,5 C17.5522847,5 18,5.41786757 18,5.93333333 L18,18.0666667 C18,18.5821324 17.5522847,19 17,19 L15,19 C14.4477153,19 14,18.5821324 14,18.0666667 L14,5.93333333 C14,5.41786757 14.4477153,5 15,5 Z\" id=\"形状结合\"></path>        </g>    </g></svg>` },\n    \"pencil\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/pencil</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/pencil\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(3.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M11,1 L11,2.2 L1.2,2.2 L1.2,17.8 L16.8,17.8 L16.8,8 L18,8 L18,18 C18,18.5522847 17.5522847,19 17,19 L1,19 C0.44771525,19 0,18.5522847 0,18 L0,2 C0,1.44771525 0.44771525,1 1,1 L11,1 Z M16.8608816,0.74608004 C17.0556551,0.551306526 17.3714454,0.551306526 17.5662189,0.74608004 L18.2715562,1.45141733 C18.4663297,1.64619084 18.4663297,1.9619811 18.2715562,2.15675462 L8.76190575,11.6664051 L6.445312,12.9618781 C6.30106541,13.0425463 6.11873594,12.9910058 6.03806772,12.8467592 C5.98683746,12.755152 5.98734579,12.6434011 6.03940732,12.5522637 L7.35135595,10.2556057 L16.8608816,0.74608004 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/pencil</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/pencil\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" fill=\"#000000\">            <path d=\"M14,3 L14,5 L5,5 L5,19 L19,19 L19,10 L21,10 L21,20 C21,20.5522847 20.5522847,21 20,21 L4,21 C3.44771525,21 3,20.5522847 3,20 L3,4 C3,3.44771525 3.44771525,3 4,3 L14,3 Z M19.9403667,3.35355339 L20.6474735,4.06066017 C20.8427356,4.25592232 20.8427356,4.57250481 20.6474735,4.76776695 L11.3142761,14.1009644 L9.32169414,15.0809343 C9.17301667,15.1540552 8.99321354,15.0928045 8.92009261,14.9441271 C8.87903177,14.8606377 8.87903177,14.7628221 8.92009261,14.6793327 L9.90006249,12.6867508 L19.2332599,3.35355339 C19.4285221,3.15829124 19.7451046,3.15829124 19.9403667,3.35355339 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"photo-wall\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/photo-wall</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/photo-wall\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon34\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M4,4 L4,1 C4,0.44771525 4.44771525,0 5,0 L19,0 C19.5522847,0 20,0.44771525 20,1 L20,11 C20,11.5522847 19.5522847,12 19,12 L16,12 L16,10.8 L18.8,10.8 L18.8,1.2 L5.2,1.2 L5.2,4 L4,4 Z M1,4 L15,4 C15.5522847,4 16,4.44771525 16,5 L16,15 C16,15.5522847 15.5522847,16 15,16 L1,16 C0.44771525,16 0,15.5522847 0,15 L0,5 C0,4.44771525 0.44771525,4 1,4 Z M1.2,5.2 L1.2,14.8 L14.8,14.8 L14.8,5.2 L1.2,5.2 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/photo-wall</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/photo-wall\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon34\" fill=\"#000000\">            <path d=\"M6,6.5 L6,5 C6,4.44771525 6.44771525,4 7,4 L21,4 C21.5522847,4 22,4.44771525 22,5 L22,15 C22,15.5522847 21.5522847,16 21,16 L19.5,16 L19.5,8 C19.5,7.17157288 18.8284271,6.5 18,6.5 L6,6.5 Z M3,8 L17,8 C17.5522847,8 18,8.44771525 18,9 L18,19 C18,19.5522847 17.5522847,20 17,20 L3,20 C2.44771525,20 2,19.5522847 2,19 L2,9 C2,8.44771525 2.44771525,8 3,8 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"play\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/play</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/play\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" fill=\"#000000\">            <path d=\"M9.52409743,4.93790611 L19.6160552,11.1483417 C20.0864131,11.4377927 20.2330671,12.0537395 19.9436161,12.5240974 C19.8615728,12.6574179 19.7493757,12.769615 19.6160552,12.8516583 L9.52409743,19.0620939 C9.05373953,19.3515449 8.4377927,19.2048909 8.14834168,18.734533 C8.05135233,18.5769253 8,18.3954954 8,18.2104356 L8,5.78956442 C8,5.23727967 8.44771525,4.78956442 9,4.78956442 C9.18505978,4.78956442 9.36648973,4.84091676 9.52409743,4.93790611 Z M9.2,6.14747731 L9.2,17.8525227 L18.7103494,12 L9.2,6.14747731 Z\" id=\"矩形\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/play</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/play\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">        <g id=\"Group\"></g>        <path d=\"M9.52409743,4.93790611 L19.6160552,11.1483417 C20.0864131,11.4377927 20.2330671,12.0537395 19.9436161,12.5240974 C19.8615728,12.6574179 19.7493757,12.769615 19.6160552,12.8516583 L9.52409743,19.0620939 C9.05373953,19.3515449 8.4377927,19.2048909 8.14834168,18.734533 C8.05135233,18.5769253 8,18.3954954 8,18.2104356 L8,5.78956442 C8,5.23727967 8.44771525,4.78956442 9,4.78956442 C9.18505978,4.78956442 9.36648973,4.84091676 9.52409743,4.93790611 Z\" id=\"矩形\" fill-opacity=\"0.9\" fill=\"#000000\"></path>    </g></svg>` },\n    \"play2\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/play2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/play2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M8.7,12.8349028 L13.2358445,10 L8.7,7.16509717 L8.7,12.8349028 Z M8.26499947,5.47812467 L14.8216014,9.57600085 C15.0557696,9.72235601 15.1269562,10.0308312 14.980601,10.2649995 C14.9403607,10.329384 14.8859859,10.3837588 14.8216014,10.4239992 L8.26499947,14.5218753 C8.0308312,14.6682305 7.72235601,14.5970439 7.57600085,14.3628756 C7.52633472,14.2834098 7.5,14.191586 7.5,14.0978762 L7.5,5.90212382 C7.5,5.62598145 7.72385763,5.40212382 8,5.40212382 C8.09370986,5.40212382 8.18553367,5.42845854 8.26499947,5.47812467 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/play2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/play2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon21\" fill=\"#000000\">            <path d=\"M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z M10.7649995,8.38024849 C10.6855337,8.33058236 10.5937099,8.30424764 10.5,8.30424764 C10.2238576,8.30424764 10,8.52810527 10,8.80424764 L10,15.1957524 C10,15.2894622 10.0263347,15.381286 10.0760008,15.4607518 C10.222356,15.6949201 10.5308312,15.7661067 10.7649995,15.6197515 L15.8782032,12.4239992 C15.9425878,12.3837588 15.9969626,12.329384 16.0372029,12.2649995 C16.1835581,12.0308312 16.1123715,11.722356 15.8782032,11.5760008 L10.7649995,8.38024849 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"previous\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/previous</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/previous\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(4.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M6.44089928,5.5 L8.87132034,7.93042107 L7.81066017,8.99108124 L4.62867966,5.80910072 L3.92157288,5.10199394 C3.72631073,4.9067318 3.72631073,4.59014931 3.92157288,4.39488716 L7.81066017,0.505799865 L8.87132034,1.56646004 L6.43778038,4 L11,4 C14.3137085,4 17,6.6862915 17,10 C17,13.3137085 14.3137085,16 11,16 L0,16 L0,14.5 L11,14.5 C13.4852814,14.5 15.5,12.4852814 15.5,10 C15.5,7.51471863 13.4852814,5.5 11,5.5 L6.44089928,5.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/previous</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/previous\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon4\" transform=\"translate(4.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M6.58578644,6 L8.41421356,7.82842712 L7,9.24264069 L3.46446609,5.70710678 C3.0739418,5.31658249 3.0739418,4.68341751 3.46446609,4.29289322 L7,0.757359313 L8.41421356,2.17157288 L6.58578644,4 L11,4 C14.3137085,4 17,6.6862915 17,10 C17,13.3137085 14.3137085,16 11,16 L0,16 L0,14 L11,14 C13.209139,14 15,12.209139 15,10 C15,7.790861 13.209139,6 11,6 L6.58578644,6 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"previous2\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/previous2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/previous2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M7.26862907,9.20000005 L8.6769553,10.6083263 L7.82842712,11.4568544 L5.84852817,9.47695549 L5.35355339,8.98198071 C5.15829124,8.78671856 5.15829124,8.47013607 5.35355339,8.27487392 L7.82842712,5.80000019 L8.6769553,6.64852836 L7.32548366,8 L12,8 C13.6568542,8 15,9.34314575 15,11 C15,12.6568542 13.6568542,14 12,14 L10,14.0000002 L10,12.8000002 L12,12.8000002 C12.9941125,12.8 13.8,11.9941125 13.8,11 C13.8,10.0058875 12.9941125,9.2 12,9.2 L7.26862907,9.20000005 Z M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/previous2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/previous2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_miniprogram\" fill=\"#000000\">            <path d=\"M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z M9.26862907,11.2 L14,11.2 C14.9941125,11.2 15.8,12.0058875 15.8,13 C15.8,13.9941125 14.9941125,14.8000002 14,14.8000002 L12,14.8000002 L12,16.0000002 L14,16.0000002 C15.6568542,16.0000002 17,14.6568542 17,13 C17,11.3431458 15.6568542,10 14,10 L9.32548366,10 L10.6769553,8.64852836 L9.82842712,7.80000019 L7.35355339,10.2748739 C7.15829124,10.4701361 7.15829124,10.7867186 7.35355339,10.9819807 L9.82842712,13.4568544 L10.6769553,12.6083263 L9.26862907,11.2 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"qr-code\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/qr-code</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/qr-code\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"图标颜色\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M8,16 L10,16 L10,18 L8,18 L8,16 Z M16,8 L18,8 L18,10 L16,10 L16,8 Z M8,12 L10,12 L10,14 L8,14 L8,12 Z M12,8 L14,8 L14,10 L12,10 L12,8 Z M1,0 L9,0 C9.55228475,0 10,0.44771525 10,1 L10,9 C10,9.55228475 9.55228475,10 9,10 L1,10 C0.44771525,10 0,9.55228475 0,9 L0,1 C0,0.44771525 0.44771525,0 1,0 Z M1.2,1.2 L1.2,8.8 L8.8,8.8 L8.8,1.2 L1.2,1.2 Z M4,4 L6,4 L6,6 L4,6 L4,4 Z M13,0 L17,0 C17.5522847,0 18,0.44771525 18,1 L18,5 C18,5.55228475 17.5522847,6 17,6 L13,6 C12.4477153,6 12,5.55228475 12,5 L12,1 C12,0.44771525 12.4477153,0 13,0 Z M13.2,4.8 L16.8,4.8 L16.8,1.2 L13.2,1.2 L13.2,4.8 Z M13,12 L17,12 C17.5522847,12 18,12.4477153 18,13 L18,17 C18,17.5522847 17.5522847,18 17,18 L13,18 C12.4477153,18 12,17.5522847 12,17 L12,13 C12,12.4477153 12.4477153,12 13,12 Z M13.2,16.8 L16.8,16.8 L16.8,13.2 L13.2,13.2 L13.2,16.8 Z M1,12 L5,12 C5.55228475,12 6,12.4477153 6,13 L6,17 C6,17.5522847 5.55228475,18 5,18 L1,18 C0.44771525,18 0,17.5522847 0,17 L0,13 C0,12.4477153 0.44771525,12 1,12 Z M1.2,16.8 L4.8,16.8 L4.8,13.2 L1.2,13.2 L1.2,16.8 Z\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/qr-code</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/qr-code\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M14,2 L14,4 L16,4 L16,2 L14,2 Z M8,16 L10,16 L10,18 L8,18 L8,16 Z M16,8 L18,8 L18,10 L16,10 L16,8 Z M8,12 L10,12 L10,14 L8,14 L8,12 Z M12,8 L14,8 L14,10 L12,10 L12,8 Z M1,0 L9,0 C9.55228475,0 10,0.44771525 10,1 L10,9 C10,9.55228475 9.55228475,10 9,10 L1,10 C0.44771525,10 0,9.55228475 0,9 L0,1 C0,0.44771525 0.44771525,0 1,0 Z M2,2 L2,8 L8,8 L8,2 L2,2 Z M4,4 L6,4 L6,6 L4,6 L4,4 Z M13,0 L17,0 C17.5522847,0 18,0.44771525 18,1 L18,5 C18,5.55228475 17.5522847,6 17,6 L13,6 C12.4477153,6 12,5.55228475 12,5 L12,1 C12,0.44771525 12.4477153,0 13,0 Z M13,12 L17,12 C17.5522847,12 18,12.4477153 18,13 L18,17 C18,17.5522847 17.5522847,18 17,18 L13,18 C12.4477153,18 12,17.5522847 12,17 L12,13 C12,12.4477153 12.4477153,12 13,12 Z M14,14 L14,16 L16,16 L16,14 L14,14 Z M1,12 L5,12 C5.55228475,12 6,12.4477153 6,13 L6,17 C6,17.5522847 5.55228475,18 5,18 L1,18 C0.44771525,18 0,17.5522847 0,17 L0,13 C0,12.4477153 0.44771525,12 1,12 Z M2,14 L2,16 L4,16 L4,14 L2,14 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"refresh\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/refresh</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/refresh\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(3.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M8.57694763,3.2112774 C4.46584819,3.43100725 1.2,6.83411377 1.2,11 C1.2,15.307821 4.69217895,18.8 9,18.8 C13.307821,18.8 16.8,15.307821 16.8,11 C16.8,8.90208215 15.9695547,6.93868889 14.5154329,5.48456711 L15.363961,4.63603897 C16.9926407,6.26471863 18,8.51471863 18,11 C18,15.9705627 13.9705627,20 9,20 C4.02943725,20 0,15.9705627 0,11 C0,6.30954147 3.58809453,2.45712733 8.16920597,2.03783519 L6.97989895,0.848528171 L7.82842712,3.1485925e-13 L10.3033009,2.47487373 C10.498563,2.67013588 10.498563,2.98671837 10.3033009,3.18198052 L9.80832608,3.6769553 L7.82842712,5.65685425 L6.97989895,4.80832608 L8.57694763,3.2112774 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/refresh</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/refresh\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_miniprogram\" fill=\"#000000\">            <path d=\"M10.5460197,5.13180618 L8.82842712,3.41421356 L10.2426407,2 L14.131728,5.8890873 C14.3269901,6.08434944 14.3269901,6.40093193 14.131728,6.59619408 L10.2426407,10.4852814 L8.82842712,9.07106781 L10.7741707,7.12532426 C8.04836137,7.69118678 6,10.1063832 6,13 C6,16.3137085 8.6862915,19 12,19 C15.3137085,19 18,16.3137085 18,13 C18,11.3852639 17.3618946,9.87661321 16.2426407,8.75735931 L17.6568542,7.34314575 C19.1045695,8.790861 20,10.790861 20,13 C20,17.418278 16.418278,21 12,21 C7.581722,21 4,17.418278 4,13 C4,9.07824577 6.821932,5.81558908 10.5460197,5.13180618 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"report-problem\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/report_problem</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/report_problem\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(1.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M10.9983807,1.40008709 L2.07828678,16.8542285 L19.9214654,16.8527331 L10.9983807,1.40008709 Z M1.73198946,18.0542575 C1.17970471,18.0542575 0.73190565,17.6066261 0.73190565,17.0543413 C0.73190565,16.8788151 0.778077283,16.7063769 0.865823011,16.5543567 L10.1322606,0.50017172 C10.4083483,0.0218474871 11.0199199,-0.142097683 11.4982441,0.133989935 C11.6502857,0.221747967 11.7765459,0.347984576 11.8643324,0.500009721 L21.133877,16.5526412 C21.4100541,17.0309138 21.2462233,17.6425161 20.7679507,17.9186932 C20.6159412,18.0064706 20.4435045,18.0526893 20.2679717,18.052704 L1.73198946,18.0542575 Z M10.3725586,6.95410156 L11.6274414,6.95410156 L11.5297852,11.6757812 L10.4702148,11.6757812 L10.3725586,6.95410156 Z M10.9975586,14.0976562 C10.6020508,14.0976562 10.2895508,13.7900391 10.2895508,13.4042969 C10.2895508,13.0185547 10.6020508,12.7158203 10.9975586,12.7158203 C11.3979492,12.7158203 11.7104492,13.0185547 11.7104492,13.4042969 C11.7104492,13.7900391 11.3979492,14.0976562 10.9975586,14.0976562 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/report-problem</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/report-problem\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(1.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M20.2679717,18.052704 L1.73198946,18.0542575 C1.17970471,18.0543038 0.731951939,17.6066261 0.731905653,17.0543413 C0.731890943,16.8788151 0.778077283,16.7063769 0.865823011,16.5543567 L10.1322606,0.50017172 C10.4083483,0.0218474871 11.0199199,-0.142097683 11.4982441,0.133989935 C11.6502857,0.221747967 11.7765459,0.347984576 11.8643324,0.500009721 L21.133877,16.5526412 C21.4100541,17.0309138 21.2462233,17.6425161 20.7679507,17.9186932 C20.6159412,18.0064706 20.4435045,18.0526893 20.2679717,18.052704 Z M10.2470703,6.54492188 L10.3642578,12.2109375 L11.6357422,12.2109375 L11.7529297,6.54492188 L10.2470703,6.54492188 Z M10.9970703,15.1171875 C11.4775391,15.1171875 11.8525391,14.7480469 11.8525391,14.2851563 C11.8525391,13.8222656 11.4775391,13.4589844 10.9970703,13.4589844 C10.5224609,13.4589844 10.1474609,13.8222656 10.1474609,14.2851563 C10.1474609,14.7480469 10.5224609,15.1171875 10.9970703,15.1171875 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"search\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/search</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/search\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(4.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M12.3099312,11.561403 L16.4242641,15.6757359 L15.5757359,16.5242641 L11.4528509,12.4013791 C10.2428099,13.4000674 8.69146727,14 7,14 C3.134,14 0,10.866 0,7 C0,3.134 3.134,0 7,0 C10.866,0 14,3.134 14,7 C14,8.74248408 13.3633321,10.3362634 12.3099312,11.561403 Z M12.7999973,7.0000124 C12.7999973,3.79675515 10.2032544,1.20001221 6.99999714,1.20001221 C3.79673989,1.20001221 1.19999695,3.79675515 1.19999695,7.0000124 C1.19999695,10.2032696 3.79673989,12.8000126 6.99999714,12.8000126 C10.2032544,12.8000126 12.7999973,10.2032696 12.7999973,7.0000124 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/search</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/search\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_search\" fill=\"#000000\">            <path d=\"M16.6216248,15.171751 L20.8662058,19.4163321 L19.4519923,20.8305456 L15.21253,16.5910833 C14.0404668,17.4755514 12.5814804,18 11,18 C7.134,18 4,14.866 4,11 C4,7.134 7.134,4 11,4 C14.866,4 18,7.134 18,11 C18,12.5631909 17.4876115,14.0067046 16.6216248,15.171751 Z M16,11 C16,8.23857143 13.7614286,6 11,6 C8.23857143,6 6,8.23857143 6,11 C6,13.7614286 8.23857143,16 11,16 C13.7614286,16 16,13.7614286 16,11 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"sending\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/sending</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/sending\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(5.000000, 7.000000)\" fill=\"#000000\">            <path d=\"M2.87132034,4.25 L8,4.25 L8,5.75 L2.87132034,5.75 L5.30330086,8.18198052 L4.24264069,9.24264069 L1.06066017,6.06066017 L0.353553391,5.35355339 C0.158291245,5.15829124 0.158291245,4.84170876 0.353553391,4.64644661 L4.24264069,0.757359313 L5.30330086,1.81801948 L2.87132034,4.25 Z M9.5,4.25 L11,4.25 L11,5.75 L9.5,5.75 L9.5,4.25 Z M12.5,4.25 L14,4.25 L14,5.75 L12.5,5.75 L12.5,4.25 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/sending</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/sending\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group-11\" transform=\"translate(5.000000, 7.000000)\" fill=\"#000000\">            <path d=\"M3.82842712,4 L8,4 L8,6 L3.82842712,6 L5.65685425,7.82842712 L4.24264069,9.24264069 L1.41421356,6.41421356 L0.353553391,5.35355339 C0.158291245,5.15829124 0.158291245,4.84170876 0.353553391,4.64644661 L4.24264069,0.757359313 L5.65685425,2.17157288 L3.82842712,4 Z M9,4 L11,4 L11,6 L9,6 L9,4 Z M12,4 L14,4 L14,6 L12,6 L12,4 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"setting\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/setting</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/setting\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10.5630683,1.2 L9.43693169,1.2 L8.79240518,3.77810602 L8.14519264,3.97714227 C7.76740015,4.0933242 7.40218123,4.24492893 7.05375494,4.42967378 L6.45518089,4.74705359 L4.17560975,3.3793109 L3.3793109,4.17560975 L4.74705359,6.45518089 L4.42967378,7.05375494 C4.24492893,7.40218123 4.0933242,7.76740015 3.97714227,8.14519264 L3.77810602,8.79240518 L1.2,9.43693169 L1.2,10.5630683 L3.77810602,11.2075948 L3.97714227,11.8548074 C4.0933242,12.2325999 4.24492893,12.5978188 4.42967378,12.9462451 L4.74705359,13.5448191 L3.3793109,15.8243903 L4.17560975,16.6206891 L6.45518089,15.2529464 L7.05375494,15.5703262 C7.40218123,15.7550711 7.76740015,15.9066758 8.14519264,16.0228577 L8.79240518,16.221894 L9.43693169,18.8 L10.5630683,18.8 L11.2075948,16.221894 L11.8548074,16.0228577 C12.2325999,15.9066758 12.5978188,15.7550711 12.9462451,15.5703262 L13.5448191,15.2529464 L15.8243903,16.6206891 L16.6206891,15.8243903 L15.2529464,13.5448191 L15.5703262,12.9462451 C15.7550711,12.5978188 15.9066758,12.2325999 16.0228577,11.8548074 L16.221894,11.2075948 L18.8,10.5630683 L18.8,9.43693169 L16.221894,8.79240518 L16.0228577,8.14519264 C15.9066758,7.76740015 15.7550711,7.40218123 15.5703262,7.05375494 L15.2529464,6.45518089 L16.6206891,4.17560975 L15.8243903,3.3793109 L13.5448191,4.74705359 L12.9462451,4.42967378 C12.5978188,4.24492893 12.2325999,4.0933242 11.8548074,3.97714227 L11.2075948,3.77810602 L10.5630683,1.2 Z M13.5083849,3.36948567 L15.3408974,2.26997816 C15.7343732,2.03389271 16.2380315,2.09589589 16.5624999,2.42036431 L17.5796357,3.43750007 C17.9041041,3.76196849 17.9661073,4.26562685 17.7300218,4.6591026 L16.6305143,6.49161512 C16.8491215,6.90390529 17.0303999,7.33902209 17.1698454,7.79246134 L19.2425356,8.31063391 C19.6877026,8.42192566 20,8.82190876 20,9.28077641 L20,10.7192236 C20,11.1780912 19.6877026,11.5780743 19.2425356,11.6893661 L17.1698454,12.2075387 C17.0303999,12.6609779 16.8491215,13.0960947 16.6305143,13.5083849 L17.7300218,15.3408974 C17.9661073,15.7343732 17.9041041,16.2380315 17.5796357,16.5624999 L16.5624999,17.5796357 C16.2380315,17.9041041 15.7343732,17.9661073 15.3408974,17.7300218 L13.5083849,16.6305143 C13.0960947,16.8491215 12.6609779,17.0303999 12.2075387,17.1698454 L11.6893661,19.2425356 C11.5780743,19.6877026 11.1780912,20 10.7192236,20 L9.28077641,20 C8.82190876,20 8.42192566,19.6877026 8.31063391,19.2425356 L7.79246134,17.1698454 C7.33902209,17.0303999 6.90390529,16.8491215 6.49161512,16.6305143 L4.6591026,17.7300218 C4.26562685,17.9661073 3.76196849,17.9041041 3.43750007,17.5796357 L2.42036431,16.5624999 C2.09589589,16.2380315 2.03389271,15.7343732 2.26997816,15.3408974 L3.36948567,13.5083849 C3.1508785,13.0960947 2.9696001,12.6609779 2.83015464,12.2075387 L0.757464375,11.6893661 C0.312297374,11.5780743 0,11.1780912 0,10.7192236 L0,9.28077641 C0,8.82190876 0.312297374,8.42192566 0.757464375,8.31063391 L2.83015464,7.79246134 C2.9696001,7.33902209 3.1508785,6.90390529 3.36948567,6.49161512 L2.26997816,4.6591026 C2.03389271,4.26562685 2.09589589,3.76196849 2.42036431,3.43750007 L3.43750007,2.42036431 C3.76196849,2.09589589 4.26562685,2.03389271 4.6591026,2.26997816 L6.49161512,3.36948567 C6.90390529,3.1508785 7.33902209,2.9696001 7.79246134,2.83015464 L8.31063391,0.757464375 C8.42192566,0.312297374 8.82190876,0 9.28077641,0 L10.7192236,0 C11.1780912,0 11.5780743,0.312297374 11.6893661,0.757464375 L12.2075387,2.83015464 C12.6609779,2.9696001 13.0960947,3.1508785 13.5083849,3.36948567 Z M10,12.8 C11.5463973,12.8 12.8,11.5463973 12.8,10 C12.8,8.4536027 11.5463973,7.2 10,7.2 C8.4536027,7.2 7.2,8.4536027 7.2,10 C7.2,11.5463973 8.4536027,12.8 10,12.8 Z M10,14 C7.790861,14 6,12.209139 6,10 C6,7.790861 7.790861,6 10,6 C12.209139,6 14,7.790861 14,10 C14,12.209139 12.209139,14 10,14 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/setting</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/setting\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon26\" fill=\"#000000\">            <path d=\"M14.2075387,4.83015464 C14.6609779,4.9696001 15.0960947,5.1508785 15.5083849,5.36948567 L17.3408974,4.26997816 C17.7343732,4.03389271 18.2380315,4.09589589 18.5624999,4.42036431 L19.5796357,5.43750007 C19.9041041,5.76196849 19.9661073,6.26562685 19.7300218,6.6591026 L18.6305143,8.49161512 C18.8491215,8.90390529 19.0303999,9.33902209 19.1698454,9.79246134 L21.2425356,10.3106339 C21.6877026,10.4219257 22,10.8219088 22,11.2807764 L22,12.7192236 C22,13.1780912 21.6877026,13.5780743 21.2425356,13.6893661 L19.1698454,14.2075387 C19.0303999,14.6609779 18.8491215,15.0960947 18.6305143,15.5083849 L19.7300218,17.3408974 C19.9661073,17.7343732 19.9041041,18.2380315 19.5796357,18.5624999 L18.5624999,19.5796357 C18.2380315,19.9041041 17.7343732,19.9661073 17.3408974,19.7300218 L15.5083849,18.6305143 C15.0960947,18.8491215 14.6609779,19.0303999 14.2075387,19.1698454 L13.6893661,21.2425356 C13.5780743,21.6877026 13.1780912,22 12.7192236,22 L11.2807764,22 C10.8219088,22 10.4219257,21.6877026 10.3106339,21.2425356 L9.79246134,19.1698454 C9.33902209,19.0303999 8.90390529,18.8491215 8.49161512,18.6305143 L6.6591026,19.7300218 C6.26562685,19.9661073 5.76196849,19.9041041 5.43750007,19.5796357 L4.42036431,18.5624999 C4.09589589,18.2380315 4.03389271,17.7343732 4.26997816,17.3408974 L5.36948567,15.5083849 C5.1508785,15.0960947 4.9696001,14.6609779 4.83015464,14.2075387 L2.75746437,13.6893661 C2.31229737,13.5780743 2,13.1780912 2,12.7192236 L2,11.2807764 C2,10.8219088 2.31229737,10.4219257 2.75746437,10.3106339 L4.83015464,9.79246134 C4.9696001,9.33902209 5.1508785,8.90390529 5.36948567,8.49161512 L4.26997816,6.6591026 C4.03389271,6.26562685 4.09589589,5.76196849 4.42036431,5.43750007 L5.43750007,4.42036431 C5.76196849,4.09589589 6.26562685,4.03389271 6.6591026,4.26997816 L8.49161512,5.36948567 C8.90390529,5.1508785 9.33902209,4.9696001 9.79246134,4.83015464 L10.3106339,2.75746437 C10.4219257,2.31229737 10.8219088,2 11.2807764,2 L12.7192236,2 C13.1780912,2 13.5780743,2.31229737 13.6893661,2.75746437 L14.2075387,4.83015464 Z M12,16 C14.209139,16 16,14.209139 16,12 C16,9.790861 14.209139,8 12,8 C9.790861,8 8,9.790861 8,12 C8,14.209139 9.790861,16 12,16 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"share\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/share</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/share\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon38\" transform=\"translate(4.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M14.8,6.2 L12,6.2 L12,5 L15.0010434,5 C15.5508697,5 16,5.44583866 16,5.99580851 L16,19.0041915 C16,19.5510798 15.5541613,20 15.0041915,20 L0.995808514,20 C0.448920205,20 0,19.5541613 0,19.0041915 L0,5.99580851 C0,5.44892021 0.447248087,5 0.998956561,5 L4,5 L4,6.2 L1.2,6.2 L1.2,18.8 L14.8,18.8 L14.8,6.2 Z M8.59999394,2.26151638 L8.59999394,11.5 L7.3999939,11.5 L7.3999939,2.26152854 L5.31299427,4.34852817 L4.46446609,3.5 L7.29289322,0.671572875 C7.68341751,0.281048584 8.31658249,0.281048584 8.70710678,0.671572875 L11.5355339,3.5 L10.6870057,4.34852817 L8.59999394,2.26151638 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/share</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/share\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon38\" fill=\"#000000\">            <path d=\"M12.75,4.36643249 L12.75,7 L19.0010434,7 C19.5508697,7 20,7.44583866 20,7.99580851 L20,21.0041915 C20,21.5510798 19.5541613,22 19.0041915,22 L4.99580851,22 C4.44892021,22 4,21.5541613 4,21.0041915 L4,7.99580851 C4,7.44892021 4.44724809,7 4.99895656,7 L11.25,7 L11.25,4.37643471 L9.53050029,6.09619408 L8.47000027,5.03553391 L11.297947,2.20716017 C11.688335,1.81649963 12.3215,1.81645183 12.7120537,2.20694664 C12.7120893,2.20698223 12.7121249,2.20701782 12.7120537,2.20716017 L15.5400004,5.03553391 L14.4795004,6.09619408 L12.75,4.36643249 Z M11.25,7 L11.25,13.5 L12.75,13.5 L12.75,7 L11.25,7 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"shop\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/shop</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/shop\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon37\" transform=\"translate(4.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M4,5 L4,4 C4,1.790861 5.790861,0 8,0 C10.209139,0 12,1.790861 12,4 L12,5 L14.9991283,5 C15.5518945,5 16,5.44892021 16,6.00748397 L16,18.0081158 C16,19.1082031 15.1054862,20 14.0059397,20 L1.99406028,20 C0.892771196,20 0,19.1066027 0,18.0081158 L0,6.00748397 C0,5.45106594 0.444630861,5 1.00087166,5 L4,5 Z M5.19999757,5 L10.7999992,5 L10.7999992,4 C10.7999969,2.45359963 9.54639417,1.19999695 8,1.19999695 C6.45359963,1.19999695 5.19999695,2.45359963 5.19999695,4 L5.19999757,5 Z M4,6.2 L1.2,6.2 L1.2,18.0081158 C1.2,18.4442694 1.5559217,18.8 1.99406028,18.8 L14.0059397,18.8 C14.4438014,18.8 14.8,18.4444047 14.8,18.0081158 L14.8,6.2 L12,6.2 L12,9 L10.7999992,9 L10.7999992,6.2 L5.19999831,6.2 L5.20000005,9 L4,9 L4,6.2 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/shop</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/shop\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon37\" fill=\"#000000\">            <path d=\"M7.5,7 L7.5,6.5 C7.5,4.01471863 9.51471863,2 12,2 C14.4852814,2 16.5,4.01471863 16.5,6.5 L16.5,7 L18.9991283,7 C19.5518945,7 20,7.44892021 20,8.00748397 L20,20.0081158 C20,21.1082031 19.1054862,22 18.0059397,22 L5.99406028,22 C4.8927712,22 4,21.1066027 4,20.0081158 L4,8.00748397 C4,7.45106594 4.44463086,7 5.00087166,7 L7.5,7 Z M9,7 L15,7 L15,6.5 C15,4.84314575 13.6568542,3.5 12,3.5 C10.3431458,3.5 9,4.84314575 9,6.5 L9,7 Z M7.5,7 L7.5,11 L9,11 L9,7 L7.5,7 Z M15,7 L15,11 L16.5,11 L16.5,7 L15,7 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"star\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/star</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/star\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group-25\" transform=\"translate(2.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M13.9414342,11.2806496 L17.8828683,7.43870082 L12.4359403,6.64721585 L10,1.71146175 L7.56405973,6.64721585 L2.11713169,7.43870082 L6.05856585,11.2806496 L5.12811946,16.7055683 L10,14.1442691 L14.8718805,16.7055683 L13.9414342,11.2806496 Z M10,15.5 L5.32783438,17.9563028 C4.83898979,18.2133036 4.23436264,18.0253571 3.97736183,17.5365125 C3.87502276,17.3418521 3.83970808,17.118884 3.87688493,16.9021263 L4.76918916,11.6995935 L0.989327772,8.01513923 C0.593844194,7.62963801 0.585751887,6.99652475 0.971253099,6.60104117 C1.1247617,6.44355754 1.32590411,6.34107036 1.54354115,6.30944585 L6.76718111,5.55040653 L9.10326392,0.816985751 C9.34768622,0.321732091 9.94731205,0.118393092 10.4425657,0.362815385 C10.6397783,0.460145624 10.7994058,0.619773146 10.8967361,0.816985751 L13.2328189,5.55040653 L18.4564589,6.30944585 C19.0030037,6.38886347 19.3816852,6.89630632 19.3022676,7.44285118 C19.270643,7.66048821 19.1681559,7.86163062 19.0106722,8.01513923 L15.2308108,11.6995935 L16.1231151,16.9021263 C16.2164761,17.4464628 15.8508883,17.9634187 15.3065518,18.0567797 C15.0897942,18.0939566 14.8668261,18.0586419 14.6721656,17.9563028 L10,15.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/star</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/star\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group-25\" fill=\"#000000\">            <path d=\"M12,18.5 L7.32783438,20.9563028 C6.83898979,21.2133036 6.23436264,21.0253571 5.97736183,20.5365125 C5.87502276,20.3418521 5.83970808,20.118884 5.87688493,19.9021263 L6.76918916,14.6995935 L2.98932777,11.0151392 C2.59384419,10.629638 2.58575189,9.99652475 2.9712531,9.60104117 C3.1247617,9.44355754 3.32590411,9.34107036 3.54354115,9.30944585 L8.76718111,8.55040653 L11.1032639,3.81698575 C11.3476862,3.32173209 11.9473121,3.11839309 12.4425657,3.36281539 C12.6397783,3.46014562 12.7994058,3.61977315 12.8967361,3.81698575 L15.2328189,8.55040653 L20.4564589,9.30944585 C21.0030037,9.38886347 21.3816852,9.89630632 21.3022676,10.4428512 C21.270643,10.6604882 21.1681559,10.8616306 21.0106722,11.0151392 L17.2308108,14.6995935 L18.1231151,19.9021263 C18.2164761,20.4464628 17.8508883,20.9634187 17.3065518,21.0567797 C17.0897942,21.0939566 16.8668261,21.0586419 16.6721656,20.9563028 L12,18.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"sticker\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/sticker</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/sticker\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M4,10.5 L16,10.5 C16,13.8137085 13.3137085,16.5 10,16.5 C6.6862915,16.5 4,13.8137085 4,10.5 Z M10,15.3 C12.2366073,15.3 14.1159277,13.7702727 14.648779,11.7 L5.35122098,11.7 C5.88407233,13.7702727 7.76339268,15.3 10,15.3 Z M6.5,8.5 C5.67157288,8.5 5,7.82842712 5,7 C5,6.17157288 5.67157288,5.5 6.5,5.5 C7.32842712,5.5 8,6.17157288 8,7 C8,7.82842712 7.32842712,8.5 6.5,8.5 Z M13.5,8.5 C12.6715729,8.5 12,7.82842712 12,7 C12,6.17157288 12.6715729,5.5 13.5,5.5 C14.3284271,5.5 15,6.17157288 15,7 C15,7.82842712 14.3284271,8.5 13.5,8.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/sticker</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/sticker\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon23\" fill=\"#000000\">            <g id=\"Group-19\" transform=\"translate(2.000000, 2.000000)\">                <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,16 C12.8690213,16 15.2249641,13.80325 15.4775785,11 L4.52242151,11 C4.7750359,13.80325 7.13097872,16 10,16 Z M6.5,8.5 C7.32842712,8.5 8,7.82842712 8,7 C8,6.17157288 7.32842712,5.5 6.5,5.5 C5.67157288,5.5 5,6.17157288 5,7 C5,7.82842712 5.67157288,8.5 6.5,8.5 Z M13.5,8.5 C14.3284271,8.5 15,7.82842712 15,7 C15,6.17157288 14.3284271,5.5 13.5,5.5 C12.6715729,5.5 12,6.17157288 12,7 C12,7.82842712 12.6715729,8.5 13.5,8.5 Z\" id=\"图标颜色\"></path>            </g>        </g>    </g></svg>` },\n    \"tag\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/tag</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/tag\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon28\" transform=\"translate(2.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M1.20710678,11.2071068 C0.816582489,10.8165825 0.816582489,10.1834175 1.20710678,9.79289322 L10.7071068,0.292893219 C10.8946432,0.10535684 11.1489971,0 11.4142136,0 L18,0 C18.5522847,0 19,0.44771525 19,1 L19,7.58578644 C19,7.85100293 18.8946432,8.10535684 18.7071068,8.29289322 L9.20710678,17.7928932 C8.81658249,18.1834175 8.18341751,18.1834175 7.79289322,17.7928932 L1.20710678,11.2071068 Z M17.8,7.50294373 L17.8,1.2 L11.4970563,1.2 L2.19705627,10.5 L8.5,16.8029437 L17.8,7.50294373 Z M14,6.5 C13.1715729,6.5 12.5,5.82842712 12.5,5 C12.5,4.17157288 13.1715729,3.5 14,3.5 C14.8284271,3.5 15.5,4.17157288 15.5,5 C15.5,5.82842712 14.8284271,6.5 14,6.5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/tag</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/tag\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon28\" fill=\"#000000\">            <path d=\"M3.20710678,14.2071068 C2.81658249,13.8165825 2.81658249,13.1834175 3.20710678,12.7928932 L12.7071068,3.29289322 C12.8946432,3.10535684 13.1489971,3 13.4142136,3 L20,3 C20.5522847,3 21,3.44771525 21,4 L21,10.5857864 C21,10.8510029 20.8946432,11.1053568 20.7071068,11.2928932 L11.2071068,20.7928932 C10.8165825,21.1834175 10.1834175,21.1834175 9.79289322,20.7928932 L3.20710678,14.2071068 Z M16,10 C17.1045695,10 18,9.1045695 18,8 C18,6.8954305 17.1045695,6 16,6 C14.8954305,6 14,6.8954305 14,8 C14,9.1045695 14.8954305,10 16,10 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"text\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/text</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/text\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M1,0 L17,0 C17.5522847,0 18,0.44771525 18,1 L18,17 C18,17.5522847 17.5522847,18 17,18 L1,18 C0.44771525,18 0,17.5522847 0,17 L0,1 C0,0.44771525 0.44771525,0 1,0 Z M1.2,1.2 L1.2,16.8 L16.8,16.8 L16.8,1.2 L1.2,1.2 Z M9.59999394,5.70000005 L9.59999394,14.5 L8.3999939,14.5 L8.3999939,5.70000005 L4.5,5.70000005 L4.5,4.5 L13.5,4.5 L13.5,5.70000005 L9.59999394,5.70000005 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/text</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/text\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" fill=\"#000000\">            <path d=\"M4,3 L20,3 C20.5522847,3 21,3.44771525 21,4 L21,20 C21,20.5522847 20.5522847,21 20,21 L4,21 C3.44771525,21 3,20.5522847 3,20 L3,4 C3,3.44771525 3.44771525,3 4,3 Z M13,9 L16.5,9 L16.5,7 L7.5,7 L7.5,9 L11,9 L11,17 L13,17 L13,9 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"time\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/time</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/time\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10.5999997,9.50294371 L14.4911685,13.3941125 L13.6426403,14.2426407 L9.39999962,10 L9.39999962,4 L10.5999997,4 L10.5999997,9.50294371 Z M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/time</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/time\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon21\" fill=\"#000000\">            <path d=\"M12.75,11.3793394 L12.75,6 L11.25,6 L11.25,12 L15.4926407,16.2433004 L16.5533009,15.1826403 L12.75,11.3793394 Z M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"transfer-text\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/transfer-text</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/transfer-text\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"图标颜色\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M1,0 L17,0 C17.5522847,0 18,0.44771525 18,1 L18,17 C18,17.5522847 17.5522847,18 17,18 L1,18 C0.44771525,18 0,17.5522847 0,17 L0,1 C0,0.44771525 0.44771525,0 1,0 Z M1.2,1.2 L1.2,16.8 L16.8,16.8 L16.8,1.2 L1.2,1.2 Z M4.57,5.86 L8.53,5.86 C8.28,5.4 7.97,4.97 7.61,4.56 L8.66,4.18 C9.02,4.65 9.35,5.21 9.65,5.86 L13.43,5.86 L13.43,6.9 L11.92,6.9 C11.44,8.4 10.74,9.65 9.82,10.66 C10.85,11.48 12.13,12.16 13.65,12.72 L13.07,13.61 C11.47,13.01 10.14,12.27 9.08,11.39 C7.96,12.38 6.58,13.11 4.95,13.57 L4.39,12.65 C5.98,12.24 7.3,11.6 8.34,10.72 C7.26,9.62 6.51,8.35 6.09,6.9 L4.57,6.9 L4.57,5.86 Z M7.09,6.9 C7.5,8.08 8.16,9.11 9.08,10.01 C9.86,9.15 10.45,8.11 10.84,6.9 L7.09,6.9 Z\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/transfer-text</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/transfer-text\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"图标颜色\" transform=\"translate(3.000000, 3.000000)\" fill=\"#000000\">            <path d=\"M1,0 L17,0 C17.5522847,0 18,0.44771525 18,1 L18,17 C18,17.5522847 17.5522847,18 17,18 L1,18 C0.44771525,18 0,17.5522847 0,17 L0,1 C0,0.44771525 0.44771525,0 1,0 Z M4.198,5.848 L4.198,6.992 L5.87,6.992 C6.332,8.587 7.157,9.984 8.345,11.194 C7.201,12.162 5.749,12.866 4,13.317 L4.616,14.329 C6.409,13.823 7.927,13.02 9.159,11.931 C10.325,12.899 11.788,13.713 13.548,14.373 L14.186,13.394 C12.514,12.778 11.106,12.03 9.973,11.128 C10.985,10.017 11.755,8.642 12.283,6.992 L13.944,6.992 L13.944,5.848 L9.786,5.848 C9.456,5.133 9.093,4.517 8.697,4 L7.542,4.418 C7.938,4.869 8.279,5.342 8.554,5.848 L4.198,5.848 Z M6.97,6.992 L11.095,6.992 C10.666,8.323 10.017,9.467 9.159,10.413 C8.147,9.423 7.421,8.29 6.97,6.992 Z\"></path>        </g>    </g></svg>` },\n    \"transfer2\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/transfer2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/transfer2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M7.78990146,7.92367324 L15,7.92367324 L15,9.12367328 L7,9.12367328 L5.54588248,9.12367328 C5.2697401,9.12367328 5.04588248,8.89981542 5.04588248,8.62367305 C5.04588248,8.47568977 5.11143476,8.33530829 5.22489809,8.24030765 L8.3863121,5.59331722 C8.55569359,5.4514974 8.8079721,5.47384054 8.94979192,5.64322203 C9.06317978,5.778646 9.07432456,5.97240774 8.97721173,6.11993928 L7.78990146,7.92367324 Z M12.255981,12.0800002 L5.04588248,12.0800002 L5.04588248,10.8800001 L13.0458825,10.8800001 L14.5,10.8800001 C14.7761424,10.8800001 15,11.103858 15,11.3800001 C15,11.5279836 14.9344477,11.6683651 14.8209844,11.7633657 L11.6595704,14.4103562 C11.4901889,14.552176 11.2379104,14.5298329 11.0960906,14.3604514 C10.9827027,14.2250274 10.9715579,14.0312657 11.0686708,13.8837341 L12.255981,12.0800002 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/transfer2</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/transfer2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_miniprogram\" fill=\"#000000\">            <path d=\"M13.0150338,14.5536734 L11.9008658,16.9301632 C11.8391719,17.0617546 11.853708,17.2164553 11.938835,17.334251 C12.0682302,17.5133036 12.3182766,17.5535588 12.4973291,17.4241636 L17.2974838,13.9552544 C17.4275709,13.8612449 17.5046203,13.7105008 17.5046203,13.5500002 C17.5046203,13.2738578 17.2807627,13.0500002 17.0046203,13.0500002 L13.7199998,13.0500002 L13.7182777,13.0536734 L7,13.0536734 L7,14.5536734 L13.0150338,14.5536734 Z M11.2095863,9.44631611 L12.3237543,7.0698263 C12.3854483,6.93823484 12.3709122,6.7835342 12.2857852,6.66573842 C12.1563899,6.48668585 11.9063436,6.44643061 11.727291,6.57582585 L6.9271363,10.0447351 C6.79704919,10.1387446 6.71999979,10.2894886 6.71999979,10.4499893 C6.71999979,10.7261316 6.94385742,10.9499893 7.21999979,10.9499893 L10.5046203,10.9499893 L10.5063424,10.9463161 L17.2199998,10.9463161 L17.2199998,9.44631611 L11.2095863,9.44631611 L11.2095863,9.44631611 Z M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"translate\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/translate</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/translate\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group-9\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M1.2,9.2 L1.2,18.8 L10.8,18.8 L10.8,9.2 L1.2,9.2 Z M8,8 L8,1.00247329 C8,0.455760956 8.44882258,0 9.00247329,0 L18.9975267,0 C19.544239,0 20,0.448822582 20,1.00247329 L20,10.9975267 C20,11.544239 19.5511774,12 18.9975267,12 L12,12 L12,18.9975267 C12,19.544239 11.5511774,20 10.9975267,20 L1.00247329,20 C0.455760956,20 0,19.5511774 0,18.9975267 L0,9.00247329 C0,8.45576096 0.448822582,8 1.00247329,8 L8,8 Z M9.2,8 L10.9975267,8 C11.544239,8 12,8.44882258 12,9.00247329 L12,10.8 L18.8,10.8 L18.8,1.2 L9.2,1.2 L9.2,8 Z M6.94499638,12.6968862 L4.78057032,12.6968862 C5.06288676,13.3628635 5.44654757,13.9564519 5.93155274,14.4704126 C6.35864685,13.9781686 6.69887435,13.391819 6.94499638,12.6968862 Z M9.22524457,12.6968862 L8.13217322,12.6968862 C7.79194571,13.6813744 7.32865719,14.4993681 6.73506877,15.1725843 C7.45895708,15.6937839 8.33486194,16.0774447 9.3845,16.3090889 C9.14561686,16.5407332 8.83434488,17.0040217 8.67508945,17.293577 C7.56030145,17.0040217 6.65544105,16.555211 5.90983609,15.9543837 C5.12079783,16.5769276 4.16526525,17.0329772 3.02152172,17.3514881 C2.90569959,17.0981272 2.58718873,16.6058831 2.3845,16.3597611 C3.49204912,16.1136391 4.39690951,15.7372172 5.12803671,15.2015398 C4.52720941,14.506607 4.06392089,13.6741355 3.68749897,12.6968862 L2.54375543,12.6968862 L2.54375543,11.6689648 L5.52617528,11.6689648 C5.45378645,11.3794095 5.32348656,11.0102265 5.18594778,10.7206711 L6.31521355,10.3876825 C6.49618563,10.72791 6.69887435,11.1839597 6.77126319,11.4879928 L6.18491365,11.6689648 L9.22524457,11.6689648 L9.22524457,12.6968862 Z M15.5507812,8.63671875 L15.1210938,7.26953125 L13.140625,7.26953125 L12.7109375,8.63671875 L11.5,8.63671875 L13.4570312,3 L14.84375,3 L16.8046875,8.63671875 L15.5507812,8.63671875 Z M14.1171875,4.078125 L13.3945312,6.38671875 L14.8671875,6.38671875 L14.1445312,4.078125 L14.1171875,4.078125 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/translate</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/translate\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group-9\" fill=\"#000000\">            <path d=\"M15.4745785,9.26953125 L17.1210938,9.26953125 L17.5507812,10.6367188 L18.8046875,10.6367188 L16.84375,5 L15.4570312,5 L14.2418545,8.5 L10,8.5 L10,3.00247329 C10,2.45576096 10.4488226,2 11.0024733,2 L20.9975267,2 C21.544239,2 22,2.44882258 22,3.00247329 L22,12.9975267 C22,13.544239 21.5511774,14 20.9975267,14 L15.5,14 L15.5,9.49268723 C15.5,9.41595736 15.4912019,9.34126077 15.4745785,9.26953125 L15.4745785,9.26953125 Z M16.1171875,6.078125 L16.1445312,6.078125 L16.8671875,8.38671875 L15.3945312,8.38671875 L16.1171875,6.078125 Z M3.00247329,10 L12.9975267,10 C13.544239,10 14,10.4488226 14,11.0024733 L14,20.9975267 C14,21.544239 13.5511774,22 12.9975267,22 L3.00247329,22 C2.45576096,22 2,21.5511774 2,20.9975267 L2,11.0024733 C2,10.455761 2.44882258,10 3.00247329,10 Z M11.2252446,14.6968862 L11.2252446,13.6689648 L8.18491365,13.6689648 L8.77126319,13.4879928 C8.69887435,13.1839597 8.49618563,12.72791 8.31521355,12.3876825 L7.18594778,12.7206711 C7.32348656,13.0102265 7.45378645,13.3794095 7.52617528,13.6689648 L4.54375543,13.6689648 L4.54375543,14.6968862 L5.68749897,14.6968862 C6.06392089,15.6741355 6.52720941,16.506607 7.12803671,17.2015398 C6.39690951,17.7372172 5.49204912,18.1136391 4.3845,18.3597611 C4.58718873,18.6058831 4.90569959,19.0981272 5.02152172,19.3514881 C6.16526525,19.0329772 7.12079783,18.5769276 7.90983609,17.9543837 C8.65544105,18.555211 9.56030145,19.0040217 10.6750895,19.293577 C10.8343449,19.0040217 11.1456169,18.5407332 11.3845,18.3090889 C10.3348619,18.0774447 9.45895708,17.6937839 8.73506877,17.1725843 C9.32865719,16.4993681 9.79194571,15.6813744 10.1321732,14.6968862 L11.2252446,14.6968862 Z M8.94499638,14.6968862 C8.69887435,15.391819 8.35864685,15.9781686 7.93155274,16.4704126 C7.44654757,15.9564519 7.06288676,15.3628635 6.78057032,14.6968862 L8.94499638,14.6968862 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"tv\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/tv</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/tv\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_tv&amp;display\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M1.2,1.2 L1.2,13.8 L18.8,13.8 L18.8,1.2 L1.2,1.2 Z M0,1 C0,0.44771525 0.44771525,0 1,0 L19,0 C19.5522847,0 20,0.44771525 20,1 L20,14 C20,14.5522847 19.5522847,15 19,15 L1,15 C0.44771525,15 0,14.5522847 0,14 L0,1 Z M6,16.8999993 C6,16.5686284 6.26617432,16.2999992 6.60130024,16.2999992 L13.3986998,16.2999992 C13.7307887,16.2999992 14,16.5783196 14,16.8999993 L14,17.4999993 L6,17.4999993 L6,16.8999993 Z M9.66543361,4.89648438 L7.80957031,4.89648438 L7.80957031,11 L6.71582031,11 L6.71582031,4.89648438 L4.55761719,4.89648438 L4.55761719,3.95410156 L9.32910156,3.95410156 L10.515625,3.95410156 L12.4345703,9.76953125 L12.4638672,9.76953125 L14.3876953,3.95410156 L15.5546875,3.95410156 L13.0400391,11 L11.84375,11 L9.66543361,4.89648438 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/tv</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/tv\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"common_icons_tv&amp;display\" fill=\"#000000\">            <path d=\"M11.2179689,7.95410156 L6.30000019,7.95410156 L6.30000019,9.16992188 L8.336133,9.16992188 L8.336133,15 L9.81074238,15 L9.81074238,9.16992188 L11.6266126,9.16992188 L13.586133,15 L15.3634768,15 L17.7316408,7.95410156 L16.1251955,7.95410156 L14.5138674,13.4814453 L14.4796877,13.4814453 L12.8683596,7.95410156 L11.2179689,7.95410156 Z M2,5 C2,4.44771525 2.44771525,4 3,4 L21,4 C21.5522847,4 22,4.44771525 22,5 L22,18 C22,18.5522847 21.5522847,19 21,19 L3,19 C2.44771525,19 2,18.5522847 2,18 L2,5 Z M8,21.0499992 C8,20.6357857 8.34375,20.2999992 8.75262058,20.2999992 L15.2473794,20.2999992 C15.6630403,20.2999992 16,20.6328979 16,21.0499992 L16,21.7999992 L8,21.7999992 L8,21.0499992 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"video-call\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/video-call</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/video-call\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"图标颜色\" transform=\"translate(2.000000, 5.000000)\" fill=\"#000000\">            <path d=\"M1.2,1.7 L1.2,12.3 L13.8,12.3 L13.8,1.7 L1.2,1.7 Z M1,0.5 L14,0.5 C14.5522847,0.5 15,0.94771525 15,1.5 L15,12.5 C15,13.0522847 14.5522847,13.5 14,13.5 L1,13.5 C0.44771525,13.5 0,13.0522847 0,12.5 L0,1.5 C0,0.94771525 0.44771525,0.5 1,0.5 Z M17.2,8.42325018 L19.8,10.5032502 L19.8,3.49674982 L17.2,5.57674982 L17.2,8.42325018 Z M16,5 L19.375305,2.29975604 C19.8065669,1.95474649 20.4358593,2.02466786 20.7808688,2.4559298 C20.9227192,2.63324285 21,2.85355335 21,3.08062485 L21,10.9193752 C21,11.4716599 20.5522847,11.9193752 20,11.9193752 C19.7729285,11.9193752 19.552618,11.8420944 19.375305,11.700244 L16,9 L16,5 Z\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/video-call</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/video-call\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Group\" transform=\"translate(2.000000, 5.000000)\" fill=\"#000000\">            <path d=\"M1,0.5 L14,0.5 C14.5522847,0.5 15,0.94771525 15,1.5 L15,12.5 C15,13.0522847 14.5522847,13.5 14,13.5 L1,13.5 C0.44771525,13.5 6.76353751e-17,13.0522847 0,12.5 L0,1.5 C-6.76353751e-17,0.94771525 0.44771525,0.5 1,0.5 Z M16,5 L19.375305,2.29975604 C19.8065669,1.95474649 20.4358593,2.02466786 20.7808688,2.4559298 C20.9227192,2.63324285 21,2.85355335 21,3.08062485 L21,10.9193752 C21,11.4716599 20.5522847,11.9193752 20,11.9193752 C19.7729285,11.9193752 19.552618,11.8420944 19.375305,11.700244 L16,9 L16,5 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"voice\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/voice</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/voice\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"Icons/Tint-Color/Black\" transform=\"translate(2.000000, 2.000000)\" fill=\"#000000\">            <path d=\"M10,20 C4.4771525,20 0,15.5228475 0,10 C0,4.4771525 4.4771525,0 10,0 C15.5228475,0 20,4.4771525 20,10 C20,15.5228475 15.5228475,20 10,20 Z M10,18.8 C14.8601058,18.8 18.8,14.8601058 18.8,10 C18.8,5.1398942 14.8601058,1.2 10,1.2 C5.1398942,1.2 1.2,5.1398942 1.2,10 C1.2,14.8601058 5.1398942,18.8 10,18.8 Z M10.3083261,14.8083261 C11.5761218,13.5405304 12.3,11.8290902 12.3,10 C12.3,8.17090981 11.5761218,6.45946962 10.3083261,5.19167389 L11.1568542,4.34314575 C12.6045695,5.790861 13.5,7.790861 13.5,10 C13.5,12.209139 12.6045695,14.209139 11.1568542,15.6568542 L10.3083261,14.8083261 Z M8.32842712,12.8284271 C9.07450989,12.0823444 9.5,11.0763727 9.5,10 C9.5,8.92362725 9.07450989,7.91765564 8.32842712,7.17157288 L9.17695526,6.32304474 C10.1179702,7.26405965 10.7,8.56405965 10.7,10 C10.7,11.4359403 10.1179702,12.7359403 9.17695526,13.6769553 L8.32842712,12.8284271 Z M7.19705627,11.6970563 L5.5,10 L7.19705627,8.30294373 C7.63137085,8.7372583 7.9,9.3372583 7.9,10 C7.9,10.6627417 7.63137085,11.2627417 7.19705627,11.6970563 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/voice</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/voice\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"icon24\" fill=\"#000000\">            <path d=\"M12,22 C6.4771525,22 2,17.5228475 2,12 C2,6.4771525 6.4771525,2 12,2 C17.5228475,2 22,6.4771525 22,12 C22,17.5228475 17.5228475,22 12,22 Z M12.3083261,16.8083261 L13.1568542,17.6568542 C14.6045695,16.209139 15.5,14.209139 15.5,12 C15.5,9.790861 14.6045695,7.790861 13.1568542,6.34314575 L12.3083261,7.19167389 C13.5761218,8.45946962 14.3,10.1709098 14.3,12 C14.3,13.8290902 13.5761218,15.5405304 12.3083261,16.8083261 Z M10.3284271,14.8284271 L11.1769553,15.6769553 C12.1179702,14.7359403 12.7,13.4359403 12.7,12 C12.7,10.5640597 12.1179702,9.26405965 11.1769553,8.32304474 L10.3284271,9.17157288 C11.0745099,9.91765564 11.5,10.9236273 11.5,12 C11.5,13.0763727 11.0745099,14.0823444 10.3284271,14.8284271 Z M9.19705627,13.6970563 C9.63137085,13.2627417 9.9,12.6627417 9.9,12 C9.9,11.3372583 9.63137085,10.7372583 9.19705627,10.3029437 L7.5,12 L9.19705627,13.6970563 Z\" id=\"图标颜色\"></path>        </g>    </g></svg>` },\n    \"volume-down\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/volume_down</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/volume_down\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <path d=\"M12,5.41421356 L7.91421356,9.5 L3,9.5 L3,14.5 L7.91421356,14.5 L12,18.5857864 L12,5.41421356 Z M7.5,8.5 L11.2928932,4.70710678 C11.6834175,4.31658249 12.3165825,4.31658249 12.7071068,4.70710678 C12.8946432,4.89464316 13,5.14899707 13,5.41421356 L13,18.5857864 C13,19.1380712 12.5522847,19.5857864 12,19.5857864 C11.7347835,19.5857864 11.4804296,19.4804296 11.2928932,19.2928932 L7.5,15.5 L3,15.5 C2.44771525,15.5 2,15.0522847 2,14.5 L2,9.5 C2,8.94771525 2.44771525,8.5 3,8.5 L7.5,8.5 Z M15.3284271,14.8284271 C16.0745099,14.0823444 16.5,13.0763727 16.5,12 C16.5,10.9236273 16.0745099,9.91765564 15.3284271,9.17157288 L16.1769553,8.32304474 C17.1179702,9.26405965 17.7,10.5640597 17.7,12 C17.7,13.4359403 17.1179702,14.7359403 16.1769553,15.6769553 L15.3284271,14.8284271 Z\" id=\"Combined-Shape\" fill=\"#000000\"></path>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/volume-down</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/volume-down\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"音量\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M9.3,0.7 C9.7,0.3 10.3,0.3 10.7,0.7 C10.9,0.9 11,1.1 11,1.4 L11,14.6 C11,15.2 10.6,15.6 10,15.6 C9.7,15.6 9.5,15.5 9.3,15.3 L5.5,11.5 L1,11.5 C0.4,11.5 0,11.1 0,10.5 L0,5.5 C0,4.9 0.4,4.5 1,4.5 L5.5,4.5 L9.3,0.7 Z M14.2,11.9 L13.1,10.8 L13.2,10.7 C13.9,10 14.3,9 14.3,8 C14.3,7 13.9,6 13.2,5.3 L13.1,5.2 L14.2,4.1 L14.3,4.2 C15.3,5.2 15.9,6.6 15.9,8 C15.9,9.4 15.3,10.8 14.3,11.8 L14.2,11.9 Z\" id=\"Combined-Shape\"></path>        </g>    </g></svg>` },\n    \"volume-off\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/volume_off</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/volume_off\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <path d=\"M8.84852842,7.15147158 L11.2928932,4.70710678 C11.6834175,4.31658249 12.3165825,4.31658249 12.7071068,4.70710678 C12.8946432,4.89464316 13,5.14899707 13,5.41421356 L13,11.3029432 L15.8635112,14.1664544 C16.2743314,13.5304353 16.5,12.7838871 16.5,12 C16.5,10.9236273 16.0745099,9.91765564 15.3284271,9.17157288 L16.1769553,8.32304474 C17.1179702,9.26405965 17.7,10.5640597 17.7,12 C17.7,13.1304063 17.3393038,14.1765674 16.7267259,15.029669 L17.8698713,16.1728144 C18.7875614,14.994606 19.3,13.5389457 19.3,12 C19.3,10.1709098 18.5761218,8.45946962 17.3083261,7.19167389 L18.1568542,6.34314575 C19.6045695,7.790861 20.5,9.790861 20.5,12 C20.5,13.9042389 19.8346829,15.6530847 18.7238215,17.0267646 L21.4249789,19.7279221 L20.5764507,20.5764502 L3.84852868,3.84852817 L4.69705685,3 L8.84852842,7.15147158 Z M12,10.3029432 L12,5.41421356 L9.55563521,7.85857836 L12,10.3029432 Z M7.80294315,9.5 L3,9.5 L3,14.5 L7.91421356,14.5 L12,18.5857864 L12,13.6970568 L13,14.6970568 L13,18.5857864 C13,19.1380712 12.5522847,19.5857864 12,19.5857864 C11.7347835,19.5857864 11.4804296,19.4804296 11.2928932,19.2928932 L7.5,15.5 L3,15.5 C2.44771525,15.5 2,15.0522847 2,14.5 L2,9.5 C2,8.94771525 2.44771525,8.5 3,8.5 L6.80294315,8.5 L7.80294315,9.5 Z\" id=\"Combined-Shape\" fill=\"#000000\"></path>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/volume-off</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/volume-off\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <path d=\"M9.06066017,6.93933983 L11.3,4.7 C11.7,4.3 12.3,4.3 12.7,4.7 C12.9,4.9 13,5.1 13,5.4 L13,10.8786797 L15.8785479,13.7572276 C16.1520151,13.2164906 16.3,12.6082453 16.3,12 C16.3,11 15.9,10 15.2,9.3 L15.1,9.2 L16.2,8.1 L16.3,8.2 C17.3,9.2 17.9,10.6 17.9,12 C17.9,13.0188672 17.5822172,14.0377344 17.0237418,14.9024214 L17.9423347,15.8210143 C18.7302379,14.7028496 19.1,13.4130518 19.1,12 C19.1,10.2 18.4,8.6 17.2,7.3 L17.1,7.2 L18.2,6.1 L18.3,6.2 C19.8,7.7 20.7,9.8 20.7,12 C20.7,13.820007 20.1524917,15.5031369 19.057475,16.9361546 L22.0918831,19.9705627 L21.0312229,21.0312229 L4.06066017,4.06066017 L5.12132034,3 L9.06066017,6.93933983 Z M13,15.1213203 L13,18.6 C13,19.2 12.6,19.6 12,19.6 C11.7,19.6 11.5,19.5 11.3,19.3 L7.5,15.5 L3,15.5 C2.4,15.5 2,15.1 2,14.5 L2,9.5 C2,8.9 2.4,8.5 3,8.5 L6.37867966,8.5 L13,15.1213203 Z\" id=\"Combined-Shape\" fill=\"#000000\"></path>    </g></svg>` },\n    \"volume-up\": { outline: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Outlined/volume_up</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Outlined/volume_up\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <path d=\"M12,5.41421356 L7.91421356,9.5 L3,9.5 L3,14.5 L7.91421356,14.5 L12,18.5857864 L12,5.41421356 Z M7.5,8.5 L11.2928932,4.70710678 C11.6834175,4.31658249 12.3165825,4.31658249 12.7071068,4.70710678 C12.8946432,4.89464316 13,5.14899707 13,5.41421356 L13,18.5857864 C13,19.1380712 12.5522847,19.5857864 12,19.5857864 C11.7347835,19.5857864 11.4804296,19.4804296 11.2928932,19.2928932 L7.5,15.5 L3,15.5 C2.44771525,15.5 2,15.0522847 2,14.5 L2,9.5 C2,8.94771525 2.44771525,8.5 3,8.5 L7.5,8.5 Z M17.3083261,16.8083261 C18.5761218,15.5405304 19.3,13.8290902 19.3,12 C19.3,10.1709098 18.5761218,8.45946962 17.3083261,7.19167389 L18.1568542,6.34314575 C19.6045695,7.790861 20.5,9.790861 20.5,12 C20.5,14.209139 19.6045695,16.209139 18.1568542,17.6568542 L17.3083261,16.8083261 Z M15.3284271,14.8284271 C16.0745099,14.0823444 16.5,13.0763727 16.5,12 C16.5,10.9236273 16.0745099,9.91765564 15.3284271,9.17157288 L16.1769553,8.32304474 C17.1179702,9.26405965 17.7,10.5640597 17.7,12 C17.7,13.4359403 17.1179702,14.7359403 16.1769553,15.6769553 L15.3284271,14.8284271 Z\" id=\"Combined-Shape\" fill=\"#000000\"></path>    </g></svg>`, filled: `<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">        <title>3.Icons/Filled/volume-up</title>    <desc>Created with Sketch.</desc>    <g id=\"3.Icons/Filled/volume-up\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" fill-opacity=\"0.9\">        <g id=\"音量\" transform=\"translate(2.000000, 4.000000)\" fill=\"#000000\">            <path d=\"M9.3,0.7 C9.7,0.3 10.3,0.3 10.7,0.7 C10.9,0.9 11,1.1 11,1.4 L11,14.6 C11,15.2 10.6,15.6 10,15.6 C9.7,15.6 9.5,15.5 9.3,15.3 L5.5,11.5 L1,11.5 C0.4,11.5 0,11.1 0,10.5 L0,5.5 C0,4.9 0.4,4.5 1,4.5 L5.5,4.5 L9.3,0.7 Z M16.2,13.9 L15.1,12.8 L15.2,12.7 C16.5,11.4 17.1,9.8 17.1,8 C17.1,6.2 16.4,4.6 15.2,3.3 L15.1,3.2 L16.2,2.1 L16.3,2.2 C17.8,3.7 18.7,5.8 18.7,8 C18.7,10.2 17.9,12.2 16.3,13.8 L16.2,13.9 Z M14.2,11.9 L13.1,10.8 L13.2,10.7 C13.9,10 14.3,9 14.3,8 C14.3,7 13.9,6 13.2,5.3 L13.1,5.2 L14.2,4.1 L14.3,4.2 C15.3,5.2 15.9,6.6 15.9,8 C15.9,9.4 15.3,10.8 14.3,11.8 L14.2,11.9 Z\" id=\"Combined-Shape\"></path>        </g>    </g></svg>` },\n}"
  },
  {
    "path": "src/components/index.json",
    "content": "{\n  \"usingComponents\": {\n    \"actionsheet\": \"./actionsheet/actionsheet\",\n    \"form-page\": \"./form-page/form-page\",\n    \"navigation-bar\": \"./navigation-bar/navigation-bar\",\n    \"form\": \"./form/form\",\n    \"cell\": \"./cell/cell\",\n    \"icon\": \"./icon/icon\",\n    \"toptips\": \"./toptips/toptips\",\n    \"loading\": \"./loading/loading\",\n    \"tabbar\": \"./tabbar/tabbar\",\n    \"cells\": \"./cells/cells\",\n    \"half-screen-dialog\": \"./half-screen-dialog/half-screen-dialog\",\n    \"slideview\": \"./slideview/slideview\",\n    \"msg\": \"./msg/msg\",\n    \"dialog\": \"./dialog/dialog\",\n    \"uploader\": \"./uploader/uploader\",\n    \"gallery\": \"./gallery/gallery\",\n    \"grids\": \"./grids/grids\",\n    \"checkbox\": \"./checkbox/checkbox\",\n    \"badge\": \"./badge/badge\",\n    \"searchbar\": \"./searchbar/searchbar\",\n    \"checkbox-group\": \"./checkbox-group/checkbox-group\"\n  }\n}"
  },
  {
    "path": "src/components/index.less",
    "content": "@import (css) '~weui-wxss/dist/style/weui.wxss';\n@import './patch.less';\n"
  },
  {
    "path": "src/components/index.ts",
    "content": "// import FormValidator from './form/form-validator'\n\nexport // FormValidator\n{}\n"
  },
  {
    "path": "src/components/index.wxml",
    "content": ""
  },
  {
    "path": "src/components/loading/__test__/__snapshots__/loading.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`loading basic 1`] = `\n<main>\n  <wx-view\n    class=\"wx_loading_view   \"\n    id=\"wx_loading_view\"\n    style=\"\"\n  >\n    <wx-view\n      class=\"weui-loadmore\"\n    >\n      <wx-image\n        class=\"weui-loading-animation\"\n        src=\"./loading-icon.svg\"\n      />\n      <wx-view\n        class=\"weui-loadmore__tips\"\n      >\n        加载中\n      </wx-view>\n    </wx-view>\n  </wx-view>\n</main>\n`;\n"
  },
  {
    "path": "src/components/loading/__test__/loading.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('loading', () => {\n    const loading = simulate.load(path.resolve(__dirname, '../loading'))\n\n    test('basic', async () => {\n        const comp = simulate.render(loading, { type: 'circle' })\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n\n    // test('duration', async () => {\n    //     const comp = simulate.render(loading, { type: 'dot-gray', duration: 100, show: true })\n    //     comp.attach(document.createElement('parent-wrapper'))\n    //     await simulate.sleep(0)\n    //     expect(comp.toJSON()).toMatchSnapshot()\n    //     await simulate.sleep(1000)\n    //     comp.setData({ show: false })\n    //     expect(comp.toJSON()).toMatchSnapshot()\n    // })\n})\n"
  },
  {
    "path": "src/components/loading/loading.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/loading/loading.less",
    "content": ".wx_loading_view{\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  overflow: hidden;\n\n  &__hide {\n    height: 0 !important;\n    display: none;\n  }\n\n  &__animated&__hide {\n    display: flex;\n  }\n}\n\n.loading {\n    color:rgba(255, 255, 255, 0.9);\n    font-size:17px;\n    text-align:center;\n}\n\n.loading_view_translation {\n  transition: height .2s .3s ease;\n}\n"
  },
  {
    "path": "src/components/loading/loading.ts",
    "content": "Component({\n    properties: {\n        extClass: {\n            type: String,\n            value: ''\n        },\n        show: {\n            // 默认显示出来\n            type: Boolean,\n            value: true\n        },\n        animated: {\n            type: Boolean,\n            value: false\n        },\n        duration: {\n            // 过渡动画时间\n            type: Number,\n            value: 350\n        },\n        type: {\n            type: String,\n            value: 'dot-gray' // 取值dot-white、dot-gray、circle\n        },\n        tips: {\n            // type是circle的时候才有效\n            type: String,\n            value: '加载中'\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/loading/loading.wxml",
    "content": "<view class=\"wx_loading_view {{animated ? 'wx_loading_view__animated' : ''}} {{!show ? 'wx_loading_view__hide' : ''}} {{extClass}}\" style=\"{{animated ? 'transition: height ' + duration + 'ms ease;' : ''}}\" id=\"wx_loading_view\">\n    <view wx:if=\"{{type==='dot-white'}}\" class=\"loading wx_dot_loading wx_dot_loading_white\">\n    </view>\n    <view wx:elif=\"{{type==='dot-gray'}}\" class=\"loading wx_dot_loading\"></view>\n    <view wx:elif=\"{{type==='circle'}}\" class=\"weui-loadmore\">\n        <view class=\"weui-loading\"></view>\n        <view class=\"weui-loadmore__tips\">{{tips}}</view>\n    </view>\n</view>"
  },
  {
    "path": "src/components/msg/__test__/__snapshots__/msg.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`msg basic 1`] = `\n<main>\n  <mp-msg>\n    <wx-view\n      class=\"weui-msg \"\n    >\n      <wx-view\n        class=\"weui-msg__icon-area\"\n      >\n        <wx-icon\n          size=\"{{64}}\"\n          type=\"success\"\n        />\n      </wx-view>\n      <wx-view\n        class=\"weui-msg__text-area\"\n      >\n        <wx-view\n          class=\"weui-msg__title\"\n        >\n          操作成功\n        </wx-view>\n        <wx-view\n          class=\"weui-msg__desc\"\n        >\n          \n      \n      \n          <wx-view\n            slot=\"desc\"\n          >\n            内容详情，可根据实际需要安排，如果换行则不超过规定长度，居中展现\n            <wx-navigator\n              class=\"weui-msg__link\"\n              url=\"\"\n            >\n              文字链接\n            </wx-navigator>\n          </wx-view>\n        </wx-view>\n        <wx-view\n          slot=\"extend\"\n        >\n          <wx-view>\n            1. 说明1\n          </wx-view>\n          <wx-view>\n            2. 说明2\n          </wx-view>\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-msg__opr-area\"\n      >\n        <wx-view\n          class=\"weui-btn-area\"\n        >\n          <wx-view\n            slot=\"handle\"\n          >\n            <wx-button\n              class=\"weui-btn\"\n              type=\"primary\"\n            >\n              主要操作\n            </wx-button>\n            <wx-button\n              class=\"weui-btn\"\n              type=\"default\"\n            >\n              辅助操作\n            </wx-button>\n          </wx-view>\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-msg__tips-area\"\n      >\n        <wx-view\n          class=\"weui-msg__tips\"\n        />\n      </wx-view>\n      <wx-view\n        class=\"weui-msg__extra-area\"\n      >\n        <wx-view\n          class=\"weui-footer\"\n        >\n          <wx-view\n            slot=\"footer\"\n          >\n            <wx-view\n              class=\"weui-footer__links\"\n            >\n              <wx-navigator\n                class=\"weui-footer__link\"\n                url=\"\"\n              >\n                底部链接文本\n              </wx-navigator>\n            </wx-view>\n            <wx-view\n              class=\"weui-footer__text\"\n            >\n              Copyright © 2008-2016 weui.io\n            </wx-view>\n          </wx-view>\n        </wx-view>\n      </wx-view>\n    </wx-view>\n  </mp-msg>\n</main>\n`;\n"
  },
  {
    "path": "src/components/msg/__test__/msg.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('msg', () => {\n    const msg = simulate.load(path.resolve(__dirname, '../msg'), 'mp-msg')\n\n    test('basic', async () => {\n        const comp = simulate.render(\n            simulate.load({\n                usingComponents: {\n                    'mp-msg': msg\n                },\n                template: `\n                    <mp-msg type=\"success\" title=\"操作成功\">\n                        <view slot=\"desc\">内容详情，可根据实际需要安排，如果换行则不超过规定长度，居中展现<navigator url=\"\" class=\"weui-msg__link\">文字链接</navigator></view>\n                        <view slot=\"extend\">\n                            <view>1. 说明1</view>\n                            <view>2. 说明2</view>\n                        </view>\n                        <view slot=\"handle\">\n                            <button class=\"weui-btn\" type=\"primary\">主要操作</button>\n                            <button class=\"weui-btn\" type=\"default\">辅助操作</button>\n                        </view>\n                        <view slot=\"footer\">\n                            <view class=\"weui-footer__links\">\n                                <navigator url=\"\" class=\"weui-footer__link\">底部链接文本</navigator>\n                            </view>\n                            <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n                        </view>\n                    </mp-msg>\n                `\n            })\n        )\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n})\n"
  },
  {
    "path": "src/components/msg/msg.json",
    "content": "{\n  \"component\": true,\n  \"styleIsolation\": \"apply-shared\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/msg/msg.less",
    "content": ".weui-msg__icon-img {\n  width: 190rpx;\n  height: 190rpx;\n}\n\n"
  },
  {
    "path": "src/components/msg/msg.ts",
    "content": "Component({\n    options: {\n        multipleSlots: true\n    },\n    properties: {\n        title: {\n            // Msg 标题\n            type: String,\n            value: ''\n        },\n        type: {\n            // icon 的 type\n            type: String,\n            value: ''\n        },\n        icon: {\n            // 可以自行设置 icon, 设置icon 之后，type 失效\n            type: String,\n            value: ''\n        },\n        desc: {\n            // 描述\n            type: String,\n            value: ''\n        },\n        extClass: {\n            type: String,\n            value: ''\n        },\n        size: {\n            // 可以自行设置 icon, 设置icon 之后，type 失效\n            type: Number,\n            value: 64\n        }\n    },\n    data: {}\n})\n"
  },
  {
    "path": "src/components/msg/msg.wxml",
    "content": "<view class=\"weui-msg {{extClass}}\">\n  <view class=\"weui-msg__icon-area\">\n    <icon type=\"{{type}}\" size=\"{{size}}\" wx:if=\"{{type}}\"></icon>\n    <image class=\"weui-msg__icon-img\" src=\"{{icon}}\" mode=\"aspectFit\" wx:elif=\"{{icon}}\" />\n  </view>\n  <view class=\"weui-msg__text-area\">\n    <view class=\"weui-msg__title\">{{title}}</view>\n    <view class=\"weui-msg__desc\">\n      {{desc}}\n      <slot name=\"desc\" wx:if=\"{{!desc}}\"></slot>\n    </view>\n    <slot name=\"extend\"></slot>\n  </view>\n  <view class=\"weui-msg__opr-area\">\n    <view class=\"weui-btn-area\">\n      <slot name=\"handle\"></slot>\n    </view>\n  </view>\n  <view class=\"weui-msg__tips-area\">\n    <view class=\"weui-msg__tips\">\n      <slot name=\"tips\"></slot>\n    </view>\n  </view>\n  <view class=\"weui-msg__extra-area\">\n    <view class=\"weui-footer\">\n      <slot name=\"footer\"></slot>\n    </view>\n  </view>\n</view>\n"
  },
  {
    "path": "src/components/navigation-bar/__test__/__snapshots__/navigation-bar.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`navigation-bar basic 1`] = `\n<main>\n  <mp-navigation-bar>\n    <wx-view\n      class=\"weui-navigation-bar \"\n    >\n      <wx-view\n        class=\"weui-navigation-bar__inner ios\"\n        style=\"color: ;background: ;;padding-right:94px;width:428px;;\"\n      >\n        <wx-view\n          class=\"weui-navigation-bar__left\"\n          style=\"width:94px; flex-direction: row; align-items: flex-start;\"\n        >\n          <wx-view\n            class=\"weui-navigation-bar__buttons weui-navigation-bar__buttons_goback\"\n            style=\"\"\n          >\n            <wx-view\n              ariaLabel=\"返回\"\n              ariaRole=\"button\"\n              class=\"weui-navigation-bar__btn_goback_wrapper\"\n              hoverClass=\"weui-active\"\n              bind:tap=\"back\"\n            >\n              <wx-view\n                class=\"weui-navigation-bar__button weui-navigation-bar__btn_goback\"\n              />\n            </wx-view>\n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"weui-navigation-bar__center\"\n        >\n          <wx-view\n            ariaRole=\"alert\"\n            class=\"weui-navigation-bar__loading\"\n          >\n            <wx-view\n              ariaLabel=\"加载中\"\n              ariaRole=\"img\"\n              class=\"weui-loading\"\n            />\n          </wx-view>\n          <wx-text>\n            UI组件库\n          </wx-text>\n        </wx-view>\n        <wx-view\n          class=\"weui-navigation-bar__right\"\n        />\n      </wx-view>\n    </wx-view>\n  </mp-navigation-bar>\n</main>\n`;\n"
  },
  {
    "path": "src/components/navigation-bar/__test__/navigation-bar.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('navigation-bar', () => {\n    const navigationBar = simulate.load(\n        path.resolve(__dirname, '../navigation-bar'),\n        'mp-navigation-bar'\n    )\n\n    test('basic', async () => {\n        const comp = simulate.render(\n            simulate.load({\n                usingComponents: {\n                    'mp-navigation-bar': navigationBar\n                },\n                template: `\n                    <mp-navigation-bar loading=\"{{true}}\" title=\"UI组件库\" back=\"{{true}}\"></mp-navigation-bar>\n                `\n            })\n        )\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n})\n"
  },
  {
    "path": "src/components/navigation-bar/navigation-bar.json",
    "content": "{\n  \"component\": true,\n  \"styleIsolation\": \"apply-shared\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/navigation-bar/navigation-bar.less",
    "content": ".weui-navigation-bar__btn_goback_wrapper {\n  padding: 11px 18px 11px 16px;\n  margin: -11px -18px -11px -16px;\n}\n\n.weui-navigation-bar__inner .weui-navigation-bar__left .weui-navigation-bar__btn_goback {\n  background-color: rgba(0, 0, 0, 0.9); /* skyline 不支持 currentColor */\n}"
  },
  {
    "path": "src/components/navigation-bar/navigation-bar.ts",
    "content": "Component({\n    options: {\n        multipleSlots: true // 在组件定义时的选项中启用多slot支持\n    },\n    /**\n     * 组件的属性列表\n     */\n    properties: {\n        extClass: {\n            type: String,\n            value: ''\n        },\n        title: {\n            type: String,\n            value: ''\n        },\n        background: {\n            type: String,\n            value: ''\n        },\n        color: {\n            type: String,\n            value: ''\n        },\n        back: {\n            type: Boolean,\n            value: true\n        },\n        loading: {\n            type: Boolean,\n            value: false\n        },\n        animated: {\n            // 显示隐藏的时候opacity动画效果\n            type: Boolean,\n            value: true\n        },\n        show: {\n            // 显示隐藏导航，隐藏的时候navigation-bar的高度占位还在\n            type: Boolean,\n            value: true,\n            observer: '_showChange'\n        },\n        // back为true的时候，返回的页面深度\n        delta: {\n            type: Number,\n            value: 1\n        }\n    },\n    /**\n     * 组件的初始数据\n     */\n    data: {\n        displayStyle: ''\n    },\n    attached() {\n        const rect = wx.getMenuButtonBoundingClientRect?.()\n        wx.getSystemInfo({\n            success: (res) => {\n                const ios = !!(res.system.toLowerCase().search('ios') + 1)\n                this.setData({\n                    ios,\n                    statusBarHeight: res.statusBarHeight,\n                    menuButtonWidth: rect?.width\n                })\n            }\n        })\n    },\n    /**\n     * 组件的方法列表\n     */\n    methods: {\n        _showChange(show) {\n            const animated = this.data.animated\n            let displayStyle = ''\n            if (animated) {\n                displayStyle = `opacity: ${\n                    show ? '1' : '0'\n                };-webkit-transition:opacity 0.5s;transition:opacity 0.5s;`\n            } else {\n                displayStyle = `display: ${show ? '' : 'none'}`\n            }\n            this.setData({\n                displayStyle\n            })\n        },\n        back() {\n            const data: any = this.data\n            if (data.delta) {\n                wx.navigateBack({\n                    delta: data.delta\n                })\n            }\n            this.triggerEvent('back', { delta: data.delta }, {})\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/navigation-bar/navigation-bar.wxml",
    "content": "<view class=\"weui-navigation-bar {{extClass}}\">\n  <view class=\"weui-navigation-bar__placeholder {{ios ? 'ios' : 'android'}}\" style=\"padding-top:{{statusBarHeight}}px;visibility: hidden;\"></view>\n  <view class=\"weui-navigation-bar__inner {{ios ? 'ios' : 'android'}}\" style=\"color:{{color}};background:{{background}};{{displayStyle}};padding-top:{{statusBarHeight}}px;\">\n\n    <!-- 左侧按钮 -->\n    <view class='weui-navigation-bar__left'>\n      <block wx:if=\"{{back || homeButton}}\">\n        <!-- 返回上一页 -->\n        <block wx:if=\"{{back}}\">\n          <view class=\"weui-navigation-bar__buttons weui-navigation-bar__buttons_goback\">\n            <view\n              bindtap=\"back\"\n              class=\"weui-navigation-bar__btn_goback_wrapper\"\n              hover-class=\"weui-active\"\n              aria-role=\"button\"\n              aria-label=\"返回\"\n            >\n              <view class=\"weui-navigation-bar__button weui-navigation-bar__btn_goback\"></view>\n            </view>\n          </view>\n        </block>\n        <!-- 返回首页 -->\n        <block wx:if=\"{{homeButton}}\">\n          <view class=\"weui-navigation-bar__buttons\">\n            <view\n              bindtap=\"home\"\n              class=\"weui-navigation-bar__btn_goback_wrapper\"\n              hover-class=\"weui-active\"\n              aria-role=\"button\"\n              aria-label=\"首页\"\n            >\n              <view class=\"weui-navigation-bar__button weui-navigation-bar__btn_home\"></view>\n            </view>\n          </view>\n        </block>\n      </block>\n      <block wx:else>\n        <slot name=\"left\"></slot>\n      </block>\n    </view>\n\n    <!-- 标题 -->\n    <view class='weui-navigation-bar__center'>\n      <view wx:if=\"{{loading}}\" class=\"weui-navigation-bar__loading\" aria-role=\"alert\">\n        <view\n          class=\"weui-loading\"\n          aria-role=\"img\"\n          aria-label=\"加载中\"\n        ></view>\n      </view>\n      <block wx:if=\"{{title}}\">\n        <text>{{title}}</text>\n      </block>\n      <block wx:else>\n        <slot name=\"center\"></slot>\n      </block>\n    </view>\n\n    <!-- 右侧留空 -->\n    <view class=\"weui-navigation-bar__right\">\n      <slot name=\"right\"></slot>\n    </view>\n  </view>\n</view>\n"
  },
  {
    "path": "src/components/patch.less",
    "content": "@import (reference) \"~weui-wxss/src/style/base/fn.less\";\n\n/* weui 用了标签写法，skyline 下部分声明不生效，所以重新声明一次 */\n/* root-portal-content 匹配不到 page 的声明，所以再声明一次 */\npage,\nroot-portal-content {\n    .varsLight();\n}\n\nroot-portal-content {\n    position: absolute;\n}\n\n/** skyline 不支持 :nth-last-child */\n.weui-half-screen-dialog__ft .weui-btn {\n    display: inline-block;\n    vertical-align: top;\n    margin: 0 8px;\n    width: 120px;\n}\n\n/** skyline 不支持 em */\n.weui-navigation-bar__inner .weui-navigation-bar__left .weui-navigation-bar__btn_goback {\n    width: 12px;\n    height: 23px;\n}\n\n/** skyline 不支持 em */\n.weui-loading {\n    width: 15.0469px;\n    height: 15.0469px;\n}\n\n/** skyline 不支持 em */\n.weui-tabbar__icon {\n    width: 26.344px;\n    height: 26.344px;\n}\n\n/** skyline 不支持 em */\n.weui-badge {\n    padding: 1.694px 4.518px;\n    line-height: 13.5529px; /** skyline 不支持不带单位 */\n}\n\n/** skyline 不支持 em */\n.weui-badge_dot {\n    padding: 4.518px;\n}\n\n/** skyline 不支持 attribute selector */\n.weui-icon-circle,\n.weui-icon-download,\n.weui-icon-info,\n.weui-icon-safe-success,\n.weui-icon-safe-warn,\n.weui-icon-success,\n.weui-icon-success-circle,\n.weui-icon-success-no-circle,\n.weui-icon-waiting,\n.weui-icon-waiting-circle,\n.weui-icon-warn,\n.weui-icon-outlined-warn,\n.weui-icon-info-circle,\n.weui-icon-cancel,\n.weui-icon-search,\n.weui-icon-clear,\n.weui-icon-back,\n.weui-icon-delete,\n.weui-icon-success-no-circle-thin,\n.weui-icon-arrow,\n.weui-icon-arrow-bold,\n.weui-icon-back-arrow,\n.weui-icon-back-arrow-thin,\n.weui-icon-close,\n.weui-icon-close-thin,\n.weui-icon-back-circle,\n.weui-icon-camera,\n.weui-icon-success,\n.weui-icon-waiting,\n.weui-icon-warn,\n.weui-icon-info,\n.weui-icon-success-circle,\n.weui-icon-success-no-circle,\n.weui-icon-success-no-circle-thin,\n.weui-icon-waiting-circle,\n.weui-icon-circle,\n.weui-icon-download,\n.weui-icon-info-circle,\n.weui-icon-safe-success,\n.weui-icon-safe-warn,\n.weui-icon-cancel,\n.weui-icon-search,\n.weui-icon-clear,\n.weui-icon-delete,\n.weui-icon_msg,\n.weui-icon_msg-primary,\n.weui-icon-checked,\n.weui-icon-btn,\n.weui-icon-arrow,\n.weui-icon-more,\n.weui-icon-slide-down,\n.weui-icon-btn_goback,\n.weui-icon-btn_close,\n.weui-icon_toast {\n    display: inline-block;\n    vertical-align: middle;\n    font-size: 0.5882352941176471rem;\n    -webkit-mask-position: 50% 50%;\n    mask-position: 50% 50%;\n    -webkit-mask-repeat: no-repeat;\n    mask-repeat: no-repeat;\n    -webkit-mask-size: 100%;\n    mask-size: 100%;\n    background-color: currentColor;\n    width: 22.578px;\n    height: 22.578px;\n}\n\n\n/** skyline 不支持 em */\n.weui-agree__checkbox {\n    width: 16px;\n    height: 18.438px;\n}\n\n/** skyline 不支持 em */\n.weui-search-bar__box .weui-icon-clear::before {\n    width: 18.813px;\n    height: 18.813px;\n}\n/** skyline 不支持 em */\n.weui-search-bar__box .weui-icon-clear::after {\n    height: 25.281px;\n}\n\n.weui-search-bar__box .weui-search-bar__input {\n    height: 33.3906px; /** skyline 不支持不带单位 */\n    line-height: 25.6px;\n}\n\n/** skyline 不支持不带单位 */\n.weui-cell {\n    line-height: 22.5882px;\n}\n"
  },
  {
    "path": "src/components/searchbar/__test__/__snapshots__/searchbar.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`searchbar basic 1`] = `\n<main>\n  <mp-searchbar\n    id=\"searchbar\"\n    bind:selectresult=\"onSelectResult\"\n  >\n    <wx-view\n      class=\"weui-search-bar  \"\n    >\n      <wx-view\n        ariaExpanded=\"\"\n        ariaHaspopup=\"{{true}}\"\n        ariaOwns=\"searchResult\"\n        ariaRole=\"combobox\"\n        class=\"weui-search-bar__form\"\n      >\n        <wx-view\n          class=\"weui-search-bar__box\"\n        >\n          <wx-icon\n            class=\"weui-icon-search\"\n            size=\"12\"\n            type=\"search\"\n          />\n          <wx-input\n            ariaControls=\"searchResult\"\n            class=\"weui-search-bar__input\"\n            focus=\"{{false}}\"\n            placeholder=\"搜索\"\n            type=\"text\"\n            value=\"\"\n            bind:blur=\"inputBlur\"\n            bind:focus=\"inputFocus\"\n            bind:input=\"inputChange\"\n          />\n        </wx-view>\n        <wx-label\n          class=\"weui-search-bar__label\"\n          id=\"searchText\"\n          bind:tap=\"showInput\"\n        >\n          <wx-icon\n            class=\"weui-icon-search\"\n            size=\"12\"\n            type=\"search\"\n          />\n          <wx-text\n            ariaHidden=\"{{true}}\"\n            class=\"weui-search-bar__text\"\n          >\n            搜索\n          </wx-text>\n        </wx-label>\n      </wx-view>\n    </wx-view>\n  </mp-searchbar>\n</main>\n`;\n\nexports[`searchbar basic 2`] = `\n<mp-searchbar\n  id=\"searchbar\"\n  bind:selectresult=\"onSelectResult\"\n>\n  <wx-view\n    class=\"weui-search-bar weui-search-bar_focusing \"\n  >\n    <wx-view\n      ariaExpanded=\"{{true}}\"\n      ariaHaspopup=\"{{true}}\"\n      ariaOwns=\"searchResult\"\n      ariaRole=\"combobox\"\n      class=\"weui-search-bar__form\"\n    >\n      <wx-view\n        class=\"weui-search-bar__box\"\n      >\n        <wx-icon\n          class=\"weui-icon-search\"\n          size=\"12\"\n          type=\"search\"\n        />\n        <wx-input\n          ariaControls=\"searchResult\"\n          class=\"weui-search-bar__input\"\n          focus=\"{{true}}\"\n          placeholder=\"搜索\"\n          type=\"text\"\n          value=\"\"\n          bind:blur=\"inputBlur\"\n          bind:focus=\"inputFocus\"\n          bind:input=\"inputChange\"\n        />\n      </wx-view>\n      <wx-label\n        class=\"weui-search-bar__label\"\n        id=\"searchText\"\n        bind:tap=\"showInput\"\n      >\n        <wx-icon\n          class=\"weui-icon-search\"\n          size=\"12\"\n          type=\"search\"\n        />\n        <wx-text\n          ariaHidden=\"{{true}}\"\n          class=\"weui-search-bar__text\"\n        >\n          搜索\n        </wx-text>\n      </wx-label>\n    </wx-view>\n    <wx-view\n      ariaRole=\"button\"\n      class=\"weui-search-bar__cancel-btn\"\n      bind:tap=\"hideInput\"\n    >\n      取消\n    </wx-view>\n  </wx-view>\n</mp-searchbar>\n`;\n\nexports[`searchbar basic 3`] = `\n<mp-searchbar\n  id=\"searchbar\"\n  bind:selectresult=\"onSelectResult\"\n>\n  <wx-view\n    class=\"weui-search-bar weui-search-bar_focusing \"\n  >\n    <wx-view\n      ariaExpanded=\"{{true}}\"\n      ariaHaspopup=\"{{true}}\"\n      ariaOwns=\"searchResult\"\n      ariaRole=\"combobox\"\n      class=\"weui-search-bar__form\"\n    >\n      <wx-view\n        class=\"weui-search-bar__box\"\n      >\n        <wx-icon\n          class=\"weui-icon-search\"\n          size=\"12\"\n          type=\"search\"\n        />\n        <wx-input\n          ariaControls=\"searchResult\"\n          class=\"weui-search-bar__input\"\n          focus=\"{{true}}\"\n          placeholder=\"搜索\"\n          type=\"text\"\n          value=\"123\"\n          bind:blur=\"inputBlur\"\n          bind:focus=\"inputFocus\"\n          bind:input=\"inputChange\"\n        />\n        <wx-text\n          ariaLabel=\"清除\"\n          ariaRole=\"button\"\n          class=\"weui-icon-clear\"\n          hoverClass=\"weui-hover-active\"\n          bind:tap=\"clearInput\"\n        />\n      </wx-view>\n      <wx-label\n        class=\"weui-search-bar__label\"\n        id=\"searchText\"\n        bind:tap=\"showInput\"\n      >\n        <wx-icon\n          class=\"weui-icon-search\"\n          size=\"12\"\n          type=\"search\"\n        />\n        <wx-text\n          ariaHidden=\"{{true}}\"\n          class=\"weui-search-bar__text\"\n        >\n          搜索\n        </wx-text>\n      </wx-label>\n    </wx-view>\n    <wx-view\n      ariaRole=\"button\"\n      class=\"weui-search-bar__cancel-btn\"\n      bind:tap=\"hideInput\"\n    >\n      取消\n    </wx-view>\n  </wx-view>\n  <mp-cells\n    id=\"searchResult\"\n  >\n    <wx-view\n      ariaRole=\"listbox\"\n      class=\" searchbar-result  weui-cells__group  \"\n    >\n      <wx-view\n        class=\"weui-cells weui-cells_after-title \"\n      >\n        <mp-cell\n          class=\"result\"\n          data-index=\"{{0}}\"\n          bind:tap=\"selectResult\"\n        >\n          <wx-view\n            ariaRole=\"option\"\n            class=\"weui-cell    \"\n            hoverClass=\"weui-hover-active\"\n            bind:tap=\"navigateTo\"\n          >\n            <wx-view\n              class=\"weui-cell__hd \"\n            />\n            <wx-view\n              class=\"weui-cell__bd\"\n            >\n              <wx-view>\n                搜索结果123\n              </wx-view>\n            </wx-view>\n            <wx-view\n              class=\"weui-cell__ft weui-cell__ft_in-access \"\n            />\n          </wx-view>\n        </mp-cell>\n      </wx-view>\n    </wx-view>\n  </mp-cells>\n</mp-searchbar>\n`;\n\nexports[`searchbar basic 4`] = `\n<mp-searchbar\n  id=\"searchbar\"\n  bind:selectresult=\"onSelectResult\"\n>\n  <wx-view\n    class=\"weui-search-bar weui-search-bar_focusing \"\n  >\n    <wx-view\n      ariaExpanded=\"{{true}}\"\n      ariaHaspopup=\"{{true}}\"\n      ariaOwns=\"searchResult\"\n      ariaRole=\"combobox\"\n      class=\"weui-search-bar__form\"\n    >\n      <wx-view\n        class=\"weui-search-bar__box\"\n      >\n        <wx-icon\n          class=\"weui-icon-search\"\n          size=\"12\"\n          type=\"search\"\n        />\n        <wx-input\n          ariaControls=\"searchResult\"\n          class=\"weui-search-bar__input\"\n          focus=\"{{true}}\"\n          placeholder=\"搜索\"\n          type=\"text\"\n          value=\"123\"\n          bind:blur=\"inputBlur\"\n          bind:focus=\"inputFocus\"\n          bind:input=\"inputChange\"\n        />\n        <wx-text\n          ariaLabel=\"清除\"\n          ariaRole=\"button\"\n          class=\"weui-icon-clear\"\n          hoverClass=\"weui-hover-active\"\n          bind:tap=\"clearInput\"\n        />\n      </wx-view>\n      <wx-label\n        class=\"weui-search-bar__label\"\n        id=\"searchText\"\n        bind:tap=\"showInput\"\n      >\n        <wx-icon\n          class=\"weui-icon-search\"\n          size=\"12\"\n          type=\"search\"\n        />\n        <wx-text\n          ariaHidden=\"{{true}}\"\n          class=\"weui-search-bar__text\"\n        >\n          搜索\n        </wx-text>\n      </wx-label>\n    </wx-view>\n    <wx-view\n      ariaRole=\"button\"\n      class=\"weui-search-bar__cancel-btn\"\n      bind:tap=\"hideInput\"\n    >\n      取消\n    </wx-view>\n  </wx-view>\n  <mp-cells\n    id=\"searchResult\"\n  >\n    <wx-view\n      ariaRole=\"listbox\"\n      class=\" searchbar-result  weui-cells__group  \"\n    >\n      <wx-view\n        class=\"weui-cells weui-cells_after-title \"\n      >\n        <mp-cell\n          class=\"result\"\n          data-index=\"{{0}}\"\n          bind:tap=\"selectResult\"\n        >\n          <wx-view\n            ariaRole=\"option\"\n            class=\"weui-cell    \"\n            hoverClass=\"weui-hover-active\"\n            bind:tap=\"navigateTo\"\n          >\n            <wx-view\n              class=\"weui-cell__hd \"\n            />\n            <wx-view\n              class=\"weui-cell__bd\"\n            >\n              <wx-view>\n                搜索结果123\n              </wx-view>\n            </wx-view>\n            <wx-view\n              class=\"weui-cell__ft weui-cell__ft_in-access \"\n            />\n          </wx-view>\n        </mp-cell>\n      </wx-view>\n    </wx-view>\n  </mp-cells>\n</mp-searchbar>\n`;\n\nexports[`searchbar basic 5`] = `\n<mp-searchbar\n  id=\"searchbar\"\n  bind:selectresult=\"onSelectResult\"\n>\n  <wx-view\n    class=\"weui-search-bar  \"\n  >\n    <wx-view\n      ariaExpanded=\"{{false}}\"\n      ariaHaspopup=\"{{true}}\"\n      ariaOwns=\"searchResult\"\n      ariaRole=\"combobox\"\n      class=\"weui-search-bar__form\"\n    >\n      <wx-view\n        class=\"weui-search-bar__box\"\n      >\n        <wx-icon\n          class=\"weui-icon-search\"\n          size=\"12\"\n          type=\"search\"\n        />\n        <wx-input\n          ariaControls=\"searchResult\"\n          class=\"weui-search-bar__input\"\n          focus=\"{{true}}\"\n          placeholder=\"搜索\"\n          type=\"text\"\n          value=\"123\"\n          bind:blur=\"inputBlur\"\n          bind:focus=\"inputFocus\"\n          bind:input=\"inputChange\"\n        />\n        <wx-text\n          ariaLabel=\"清除\"\n          ariaRole=\"button\"\n          class=\"weui-icon-clear\"\n          hoverClass=\"weui-hover-active\"\n          bind:tap=\"clearInput\"\n        />\n      </wx-view>\n      <wx-label\n        class=\"weui-search-bar__label\"\n        id=\"searchText\"\n        bind:tap=\"showInput\"\n      >\n        <wx-icon\n          class=\"weui-icon-search\"\n          size=\"12\"\n          type=\"search\"\n        />\n        <wx-text\n          ariaHidden=\"{{true}}\"\n          class=\"weui-search-bar__text\"\n        >\n          搜索\n        </wx-text>\n      </wx-label>\n    </wx-view>\n  </wx-view>\n</mp-searchbar>\n`;\n\nexports[`searchbar basic 6`] = `\n<mp-searchbar\n  id=\"searchbar\"\n  bind:selectresult=\"onSelectResult\"\n>\n  <wx-view\n    class=\"weui-search-bar weui-search-bar_focusing \"\n  >\n    <wx-view\n      ariaExpanded=\"{{true}}\"\n      ariaHaspopup=\"{{true}}\"\n      ariaOwns=\"searchResult\"\n      ariaRole=\"combobox\"\n      class=\"weui-search-bar__form\"\n    >\n      <wx-view\n        class=\"weui-search-bar__box\"\n      >\n        <wx-icon\n          class=\"weui-icon-search\"\n          size=\"12\"\n          type=\"search\"\n        />\n        <wx-input\n          ariaControls=\"searchResult\"\n          class=\"weui-search-bar__input\"\n          focus=\"{{false}}\"\n          placeholder=\"搜索\"\n          type=\"text\"\n          value=\"\"\n          bind:blur=\"inputBlur\"\n          bind:focus=\"inputFocus\"\n          bind:input=\"inputChange\"\n        />\n      </wx-view>\n      <wx-label\n        class=\"weui-search-bar__label\"\n        id=\"searchText\"\n        bind:tap=\"showInput\"\n      >\n        <wx-icon\n          class=\"weui-icon-search\"\n          size=\"12\"\n          type=\"search\"\n        />\n        <wx-text\n          ariaHidden=\"{{true}}\"\n          class=\"weui-search-bar__text\"\n        >\n          搜索\n        </wx-text>\n      </wx-label>\n    </wx-view>\n    <wx-view\n      ariaRole=\"button\"\n      class=\"weui-search-bar__cancel-btn\"\n      bind:tap=\"hideInput\"\n    >\n      取消\n    </wx-view>\n  </wx-view>\n</mp-searchbar>\n`;\n"
  },
  {
    "path": "src/components/searchbar/__test__/searchbar.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('searchbar', () => {\n    const searchbar = simulate.load(path.resolve(__dirname, '../searchbar'), 'mp-searchbar')\n\n    test('basic', async () => {\n        const onSelectResult = jest.fn()\n\n        const wrapper = simulate.render(\n            simulate.load({\n                usingComponents: {\n                    'mp-searchbar': searchbar\n                },\n                template:\n                    '<mp-searchbar id=\"searchbar\" search=\"{{search}}\" bindselectresult=\"onSelectResult\"></mp-searchbar>',\n                ready() {\n                    this.setData({\n                        search: this.search.bind(this)\n                    })\n                },\n                methods: {\n                    search(value: string) {\n                        return Promise.resolve([{ text: '搜索结果' + value, value: value }])\n                    },\n                    onSelectResult\n                }\n            })\n        )\n        wrapper.attach(document.createElement('parent-wrapper'))\n        const comp = wrapper.querySelector('#searchbar')\n        await simulate.sleep(0)\n        expect(wrapper.toJSON()).toMatchSnapshot()\n\n        const label = comp.querySelector('.weui-search-bar__label')\n        const input = comp.querySelector('.weui-search-bar__input')\n        label.dispatchEvent('tap')\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        input.dispatchEvent('input', { detail: { value: '123' } })\n        await simulate.sleep(1000)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        const results = comp.querySelectorAll('.result')\n        results[0].dispatchEvent('tap')\n        await simulate.sleep(100)\n        expect(comp.toJSON()).toMatchSnapshot()\n        expect(onSelectResult).toHaveBeenCalledTimes(1)\n        expect(onSelectResult.mock.calls[0][0].detail).toStrictEqual({\n            index: 0,\n            item: { text: '搜索结果123', value: '123' }\n        })\n\n        const cancel = comp.querySelector('.weui-search-bar__cancel-btn')\n        cancel.dispatchEvent('tap')\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        label.dispatchEvent('tap')\n        await simulate.sleep(0)\n        const clear = comp.querySelector('.weui-icon-clear')\n        clear.dispatchEvent('tap')\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n})\n"
  },
  {
    "path": "src/components/searchbar/searchbar.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {\n        \"mp-cells\": \"../cells/cells\",\n        \"mp-cell\": \"../cell/cell\"\n    }\n}"
  },
  {
    "path": "src/components/searchbar/searchbar.less",
    "content": ".weui-search-bar__label text {\n  display: inline-block;\n  font-size: 14px;\n  vertical-align: middle;\n}\n\n.weui-search-bar .weui-icon-search,\n.weui-search-bar__box .weui-icon-search,\n.weui-search-bar .weui-search-bar__box .weui-icon-clear {\n  width: 22.578px;\n  height: 22.578px;\n}\n\n.weui-search-bar .weui-icon-search,\n.weui-search-bar__box .weui-icon-search {\n  background-color: var(--weui-FG-2); /* skyline 不支持 currentColor */\n}\n\n.weui-search-bar__box .weui-icon-clear::before {\n  background-color: var(--weui-FG-2); /* skyline 不支持 currentColor */\n  width: 22.578px;\n  height: 22.578px;\n}\n"
  },
  {
    "path": "src/components/searchbar/searchbar.ts",
    "content": "Component({\n    properties: {\n        extClass: {\n            type: String,\n            value: ''\n        },\n        focus: {\n            type: Boolean,\n            value: false\n        },\n        placeholder: {\n            type: String,\n            value: '搜索'\n        },\n        value: {\n            type: String,\n            value: '',\n            observer: 'valueChange'\n        },\n        // 修复了 properties 第一层不能放 function\n        search: {\n            // 返回Promise的函数\n            type: null, // type: Function 等价 null\n            value: null\n        },\n        throttle: {\n            // 500ms内只会调用一次search函数\n            type: Number,\n            value: 500\n        },\n        cancelText: {\n            type: String,\n            value: '取消'\n        },\n        cancel: {\n            type: Boolean,\n            value: true\n        }\n    },\n    data: {\n        result: [] // 搜索结果\n    },\n    // @ts-ignore\n    lastSearch: Date.now(),\n    lifetimes: {\n        // @ts-ignore\n        attached() {\n            // @ts-ignore\n            if (this.data.focus) {\n                this.setData({\n                    searchState: true\n                })\n            }\n        }\n    },\n    methods: {\n        valueChange() {\n            if (this.data.value) {\n                this.setData({\n                    searchState: true\n                })\n            }\n        },\n        clearInput() {\n            // @ts-ignore\n            this.setData({\n                value: '',\n                focus: false,\n                result: []\n            })\n            // @ts-ignore\n            this.triggerEvent('clear')\n        },\n        // @ts-ignore\n        inputFocus(e) {\n            // this.setData({\n            //     searchState: true\n            // })\n            // @ts-ignore\n            this.triggerEvent('focus', e.detail)\n        },\n        // @ts-ignore\n        inputBlur(e) {\n            this.setData({\n                focus: false\n            })\n            this.triggerEvent('blur', e.detail)\n        },\n        showInput() {\n            this.setData({\n                focus: true,\n                searchState: true\n            })\n        },\n        hideInput() {\n            this.setData({\n                searchState: false\n            })\n            this.triggerEvent('cancel')\n        },\n        // @ts-ignore\n        inputChange(e) {\n            this.setData({\n                value: e.detail.value\n            })\n            this.triggerEvent('input', e.detail)\n            if (Date.now() - this.lastSearch < this.data.throttle) {\n                return\n            }\n            if (typeof this.data.search !== 'function') {\n                return\n            }\n            this.lastSearch = Date.now()\n            this.timerId = setTimeout(() => {\n                this.data\n                    .search(this.data.value)\n                    .then((json) => {\n                        this.setData({\n                            result: json\n                        })\n                    })\n                    .catch((err) => {\n                        console.error('search error', err)\n                    })\n            }, this.data.throttle)\n        },\n        // @ts-ignore\n        selectResult(e) {\n            const { index } = e.currentTarget.dataset\n            const item = this.data.result[index]\n            this.triggerEvent('selectresult', { index, item })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/searchbar/searchbar.wxml",
    "content": "<view class=\"weui-search-bar {{searchState ? 'weui-search-bar_focusing' : ''}} {{extClass}}\">\n    <view\n        class=\"weui-search-bar__form\"\n        aria-role=\"combobox\"\n        aria-haspopup\n        aria-expanded=\"{{searchState}}\"\n        aria-owns=\"searchResult\"\n    >\n        <view class=\"weui-search-bar__box\">\n            <icon class=\"weui-icon-search\" type=\"search\" size=\"12\"></icon>\n            <input\n                aria-controls=\"searchResult\"\n                type=\"text\"\n                class=\"weui-search-bar__input\"\n                placeholder=\"{{placeholder}}\"\n                value=\"{{value}}\"\n                focus=\"{{focus}}\"\n                bindblur=\"inputBlur\"\n                bindfocus=\"inputFocus\"\n                bindinput=\"inputChange\"\n            />\n            <view\n                class=\"weui-icon-clear\"\n                hover-class=\"weui-hover-active\"\n                wx:if=\"{{value.length > 0}}\"\n                bindtap=\"clearInput\"\n                aria-role=\"button\"\n                aria-label=\"清除\"\n            ></view>\n        </view>\n        <label id=\"searchText\" class=\"weui-search-bar__label\" bindtap=\"showInput\">\n            <icon class=\"weui-icon-search\" type=\"search\" size=\"12\"></icon>\n            <text aria-hidden class=\"weui-search-bar__text\">{{placeholder}}</text>\n        </label>\n    </view>\n    <view\n        wx:if=\"{{cancel && searchState}}\"\n        class=\"weui-search-bar__cancel-btn\"\n        bindtap=\"hideInput\"\n        aria-role=\"button\"\n    >{{cancelText}}</view>\n</view>\n<mp-cells\n    id=\"searchResult\"\n    aria-role=\"listbox\"\n    ext-class=\" {{'searchbar-result ' + extClass}}\"\n    wx:if=\"{{searchState && result.length > 0}}\"\n>\n    <mp-cell\n        class=\"result\"\n        bindtap=\"selectResult\"\n        body-class=\"weui-cell_primary\"\n        data-index=\"{{index}}\"\n        wx:for=\"{{result}}\"\n        wx:key=\"index\"\n        hover\n        aria-role=\"option\"\n    >\n        <view>{{item.text}}</view>\n    </mp-cell>\n</mp-cells>"
  },
  {
    "path": "src/components/slideview/__test__/__snapshots__/slideview.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`slideview basic 1`] = `\n<main\n  bind:buttontap=\"slideButtonTap\"\n>\n  <wx-view\n    class=\"weui-slideview weui-movable-view  \"\n    style=\"width: 100%;height: 100%;\"\n  >\n    <wx-view\n      $gdc=\"{{[Function]}}\"\n      $wxs:bindtouchend=\"{{[Function]}}\"\n      $wxs:bindtouchmove=\"{{[Function]}}\"\n      $wxs:bindtouchstart=\"{{[Function]}}\"\n      $wxs:bindtransitionend=\"{{[Function]}}\"\n      $wxs:change:disable=\"{{[Function]}}\"\n      $wxs:change:duration=\"{{[Function]}}\"\n      $wxs:change:prop=\"{{[Function]}}\"\n      $wxs:change:rebounce=\"{{[Function]}}\"\n      $wxs:change:show=\"{{[Function]}}\"\n      class=\"weui-slideview__left left\"\n      disable=\"{{false}}\"\n      duration=\"{{350}}\"\n      prop=\"{{\n        Object {\n          \"button\": Object {\n            \"bottom\": 0,\n            \"dataset\": Object {},\n            \"height\": 0,\n            \"id\": \"\",\n            \"left\": 0,\n            \"right\": 0,\n            \"top\": 0,\n            \"width\": 0,\n          },\n          \"buttons\": Array [\n            Object {\n              \"bottom\": 0,\n              \"dataset\": Object {},\n              \"height\": 0,\n              \"id\": \"\",\n              \"left\": 0,\n              \"right\": 0,\n              \"top\": 0,\n              \"width\": 0,\n            },\n            Object {\n              \"bottom\": 0,\n              \"dataset\": Object {},\n              \"height\": 0,\n              \"id\": \"\",\n              \"left\": 0,\n              \"right\": 0,\n              \"top\": 0,\n              \"width\": 0,\n            },\n            Object {\n              \"bottom\": 0,\n              \"dataset\": Object {},\n              \"height\": 0,\n              \"id\": \"\",\n              \"left\": 0,\n              \"right\": 0,\n              \"top\": 0,\n              \"width\": 0,\n            },\n          ],\n          \"disable\": false,\n          \"rebounce\": 0,\n          \"show\": true,\n          \"throttle\": 40,\n        }\n      }}\"\n      rebounce=\"{{0}}\"\n      show=\"{{true}}\"\n      style=\"width:100%;\"\n    >\n      <main>\n        <wx-view\n          class=\"weui-cell    \"\n          hoverClass=\"\"\n          bind:tap=\"navigateTo\"\n        >\n          <wx-view\n            class=\"weui-cell__hd \"\n          />\n          <wx-view\n            class=\"weui-cell__bd \"\n          >\n            左滑可以删除\n          </wx-view>\n          <wx-view\n            class=\"weui-cell__ft \"\n          >\n            说明文字\n          </wx-view>\n        </wx-view>\n      </main>\n    </wx-view>\n    <wx-view\n      class=\"weui-slideview__right right\"\n    >\n      <wx-view\n        class=\"weui-slideview__buttons\"\n        style=\"height:100%;width:100%;\"\n      >\n        <wx-view\n          class=\"btn weui-slideview__btn__wrp weui-slideview__btn-group_default \"\n        >\n          <wx-view\n            $gdc=\"{{[Function]}}\"\n            $wxs:bindtap=\"{{[Function]}}\"\n            class=\"weui-slideview__btn\"\n            data-data=\"\"\n            data-index=\"{{0}}\"\n          >\n            <wx-text>\n              普通\n            </wx-text>\n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"btn weui-slideview__btn__wrp weui-slideview__btn-group_default \"\n        >\n          <wx-view\n            $gdc=\"{{[Function]}}\"\n            $wxs:bindtap=\"{{[Function]}}\"\n            class=\"weui-slideview__btn\"\n            data-data=\"\"\n            data-index=\"{{1}}\"\n          >\n            <wx-text>\n              普通\n            </wx-text>\n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"btn weui-slideview__btn__wrp weui-slideview__btn-group_warn \"\n        >\n          <wx-view\n            $gdc=\"{{[Function]}}\"\n            $wxs:bindtap=\"{{[Function]}}\"\n            class=\"weui-slideview__btn\"\n            data-data=\"\"\n            data-index=\"{{2}}\"\n          >\n            <wx-text>\n              警示\n            </wx-text>\n          </wx-view>\n        </wx-view>\n      </wx-view>\n    </wx-view>\n  </wx-view>\n</main>\n`;\n"
  },
  {
    "path": "src/components/slideview/__test__/slideview.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\n/**\n * TODO slideview 使用了 wxs 事件绑定，等待 j-component 支持\n */\ndescribe.skip('slideview', () => {\n    test('basic', async () => {\n        const slideview = simulate.load(path.resolve(__dirname, '../slideview'), 'mp-slideview')\n        const cell = simulate.load(path.resolve(__dirname, '../../cell/cell'), 'mp-cell')\n\n        const comp = simulate.render(\n            simulate.load({\n                usingComponents: {\n                    'mp-slideview': slideview,\n                    'mp-cell': cell\n                },\n                template: `\n                    <mp-slideview show=\"{{true}}\" buttons=\"{{slideButtons}}\" bindbuttontap=\"slideButtonTap\">\n                        <mp-cell value=\"左滑可以删除\" footer=\"说明文字\"></mp-cell>\n                    </mp-slideview>\n                `,\n                data: {\n                    slideButtons: [\n                        {\n                            text: '普通'\n                        },\n                        {\n                            text: '普通'\n                        },\n                        {\n                            type: 'warn',\n                            text: '警示'\n                        }\n                    ]\n                }\n            })\n        )\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(1000)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n})\n"
  },
  {
    "path": "src/components/slideview/slideview-skyline.json",
    "content": "{\n  \"component\": true,\n  \"styleIsolation\": \"apply-shared\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/slideview/slideview-skyline.less",
    "content": ".weui-slideview__btn {\n    flex: 1;\n    min-width: 0;\n}\n.weui-slideview_icon .weui-slideview__btn {\n    flex: none;\n}\n.weui-slideview__btn__wrp {\n    justify-content: center;\n}\n/** for skyline */\n.weui-slideview_icon .weui-slideview__btn {\n    display: flex; /* skyline inline-block 居中有问题 */\n}"
  },
  {
    "path": "src/components/slideview/slideview-skyline.ts",
    "content": "Component({\n    /**\n     * 组件的属性列表\n     */\n    options: {\n        multipleSlots: true,\n        virtualHost: true\n    },\n    properties: {\n        extClass: {\n            type: String,\n            value: ''\n        },\n        buttons: {\n            type: Array,\n            value: [], // type, data, text, src, extClass\n            observer() {\n                this.addClassNameForButton()\n            }\n        },\n        disable: {\n            type: Boolean,\n            value: false\n        },\n        icon: {\n            // 是否是icon\n            type: Boolean,\n            value: false\n        },\n        show: {\n            type: Boolean,\n            value: false,\n            observer() {\n                if (!this.st) return\n                if (this.data.show) {\n                    this.showButtons()\n                } else {\n                    this.hideButtons()\n                }\n            }\n        },\n        duration: {\n            type: Number,\n            value: 350 // 动画时长，单位ms\n        },\n        throttle: {\n            type: Number,\n            value: 40\n        },\n        rebounce: {\n            type: Number,\n            value: 0 // 回弹距离\n        }\n    },\n\n    lifetimes: {\n        ready() {\n            this.addClassNameForButton()\n            // 共享元素 this.st\n            this.st = {\n                movex: wx.worklet.shared(0),\n                max: wx.worklet.shared(0),\n                startX: wx.worklet.shared(0),\n                startY: wx.worklet.shared(0),\n                out: wx.worklet.shared(this.data.show),\n                isMoving: wx.worklet.shared(false),\n                firstAngle: wx.worklet.shared(0),\n                buttons: wx.worklet.shared([])\n            }\n            this.initAnimate()\n        },\n    },\n\n    methods: {\n        addClassNameForButton() {\n            // @ts-ignore\n            const { buttons, icon } = this.data\n            buttons.forEach((btn) => {\n                if (icon) {\n                    btn.className = ''\n                } else if (btn.type === 'warn') {\n                    btn.className = 'weui-slideview__btn-group_warn'\n                } else {\n                    btn.className = 'weui-slideview__btn-group_default'\n                }\n            })\n            this.setData({\n                buttons\n            })\n        },\n        buttonTap(event) {\n            this.hideButtons()\n            const index = event.currentTarget.dataset.index\n            this.triggerEvent(\n                'buttontap',\n                {\n                    index,\n                    data: this.data.buttons[index].data\n                },\n                {}\n            )\n        },\n        transitionEnd() {},\n\n        showButtons() {\n            if (this.data.disable) return\n            const { movex, max, out } = this.st\n            if (out.value) return\n            out.value = true\n            movex.value = this.data.duration\n                ? wx.worklet.timing(max.value, { duration: this.data.duration }, () => {})\n                : max.value\n            this.triggerEvent('show', {}, {})\n        },\n\n        hideButtons() {\n            if (this.data.disable) return\n            const { movex, out } = this.st\n            if (!out.value) return\n            out.value = false\n            movex.value = this.data.duration\n                ? wx.worklet.timing(0, { duration: this.data.duration }, () => {})\n                : 0\n            this.triggerEvent('hide', {}, {})\n        },\n\n        // 动画，从 wxs 迁移过来\n        // 用 this.st 来存滑动状态\n        initAnimate() {\n            // 左侧动画\n            this.applyAnimatedStyle('.weui-slideview__left', () => {\n                'worklet'\n                const { movex } = this.st\n                return {\n                    transform: `translateX(${-movex.value}px)`\n                }\n            })\n\n            // 按钮动画\n            this.createSelectorQuery()\n                .selectAll('.btn')\n                .boundingClientRect((rects) => {\n                    // 记录单个按钮最大值，总的最大值为所有按钮宽度的和\n                    let total = 0\n                    const buttons = []\n                    for (let i = rects.length - 1; i >= 0; i--) {\n                        total += rects[i].width\n                        buttons[i] = total\n                    }\n                    this.st.buttons.value = buttons\n                    this.st.max.value = total\n                    if (this.data.show) this.st.movex.value = total\n\n                    for (let index = rects.length - 1; index >= 0; index--) {\n                        this.applyAnimatedStyle(`.btn-${index}`, () => {\n                            'worklet'\n                            const { movex, max, buttons } = this.st\n                            const leftWidth = buttons.value[index]\n                            const transformx = (movex.value * leftWidth) / max.value\n\n                            return {\n                                transform: `translateX(${-transformx}px)`\n                            }\n                        })\n                    }\n                })\n                .exec()\n        },\n        touchstart(event) {\n            'worklet'\n\n            if (this.data.disable) return // disable的逻辑\n            const { startX, startY, firstAngle } = this.st\n            startX.value = event.touches[0].pageX\n            startY.value = event.touches[0].pageY\n            firstAngle.value = 0\n        },\n        touchmove(event) {\n            'worklet'\n            if (this.data.disable) return // disable的逻辑\n            const { startX, startY, firstAngle, isMoving, movex, max, out } = this.st\n            const pagex = event.touches[0].pageX - startX.value\n            const pagey = event.touches[0].pageY - startY.value\n            // 左侧45度角为界限，大于45度则允许水平滑动\n            if (firstAngle.value === 0) {\n                firstAngle.value = Math.abs(pagex) - Math.abs(pagey)\n            }\n            if (firstAngle.value < 0) {\n                return\n            }\n\n            isMoving.value = true\n            if (out.value) {\n                movex.value = Math.max(0, Math.min(max.value - pagex, max.value))\n            } else {\n                movex.value = Math.max(0, Math.min(-pagex, max.value))\n            }\n\n            return false // 禁止垂直方向的滑动\n        },\n        touchend(event) {\n            'worklet'\n            if (this.data.disable) return // disable的逻辑\n            const { throttle } = this.data\n            const { startX, isMoving } = this.st\n            if (!isMoving.value) return\n\n            const pagex = event.changedTouches[0].pageX - startX.value\n\n            isMoving.value = false\n            if (Math.abs(pagex) < throttle || pagex > 0) {\n                this.hideButtons()\n            } else {\n                this.showButtons()\n            }\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/slideview/slideview-skyline.wxml",
    "content": "<!-- slide-view/slide-view.wxml -->\n<view class=\"weui-slideview weui-movable-view {{icon ? 'weui-slideview_icon' : ''}} {{extClass}}\" style=\"width: 100%;height: 100%;\">\n    <view bindtouchstart=\"touchstart\" bindtouchmove=\"touchmove\" bindtouchend=\"touchend\" class=\"weui-slideview__left left\" style=\"width:100%;\">\n      <slot></slot>\n    </view>\n    <view class=\"weui-slideview__right right\">\n      <view class=\"weui-slideview__buttons\" style=\"height:100%;width:100%;\" wx:if=\"{{buttons && buttons.length}}\">\n        <view wx:for=\"{{buttons}}\" wx:key=\"index\" class='btn weui-slideview__btn__wrp btn-{{index}} {{item.className}}'>\n          <view\n            bind:tap=\"buttonTap\"\n            data-index=\"{{index}}\"\n            class='weui-slideview__btn {{item.extClass}}'\n            aria-role=\"button\"\n          >\n            <view wx:if=\"{{!icon}}\">{{item.text}}</view>\n            <image class=\"weui-slideview__btn__icon\" wx:else src=\"{{item.src}}\"/>\n          </view>\n        </view>\n      </view>\n    </view>\n</view>\n"
  },
  {
    "path": "src/components/slideview/slideview.json",
    "content": "{\n  \"component\": true,\n  \"styleIsolation\": \"apply-shared\",\n  \"usingComponents\": {\n    \"slideview-skyline\": \"./slideview-skyline\"\n  }\n}"
  },
  {
    "path": "src/components/slideview/slideview.less",
    "content": ".weui-slideview__btn {\n    flex: 1;\n    min-width: 0;\n}\n.weui-slideview_icon .weui-slideview__btn {\n    flex: none;\n}\n.weui-slideview__btn__wrp {\n    justify-content: center;\n}\n"
  },
  {
    "path": "src/components/slideview/slideview.ts",
    "content": "Component({\n    /**\n     * 组件的属性列表\n     */\n    options: {\n        multipleSlots: true\n    },\n    properties: {\n        extClass: {\n            type: String,\n            value: ''\n        },\n        buttons: {\n            type: Array,\n            value: [], // type, data, text, src, extClass\n            observer() {\n                this.addClassNameForButton()\n            }\n        },\n        disable: {\n            type: Boolean,\n            value: false\n        },\n        icon: {\n            // 是否是icon\n            type: Boolean,\n            value: false\n        },\n        show: {\n            type: Boolean,\n            value: false\n        },\n        duration: {\n            type: Number,\n            value: 350 // 动画时长，单位ms\n        },\n        throttle: {\n            type: Number,\n            value: 40\n        },\n        rebounce: {\n            type: Number,\n            value: 0 // 回弹距离\n        }\n    },\n\n    /**\n     * 组件的初始数据\n     */\n    data: {\n        size: null,\n        renderer: 'webview'\n    },\n\n    created() {\n        this.setData({ renderer: this.renderer })\n    },\n\n    ready() {\n        this.updateRight()\n        this.addClassNameForButton()\n    },\n    /**\n     * 组件的方法列表\n     */\n    methods: {\n        updateRight() {\n            // 获取右侧滑动显示区域的宽度\n            const data: any = this.data\n            const query = wx.createSelectorQuery().in(this)\n            query\n                .select('.left')\n                .boundingClientRect((res) => {\n                    const btnQuery = wx.createSelectorQuery().in(this)\n                    btnQuery\n                        .selectAll('.btn')\n                        .boundingClientRect((rects) => {\n                            this.setData({\n                                size: {\n                                    buttons: rects,\n                                    button: res,\n                                    show: data.show,\n                                    disable: data.disable,\n                                    throttle: data.throttle,\n                                    rebounce: data.rebounce\n                                }\n                            })\n                        })\n                        .exec()\n                })\n                .exec()\n        },\n        addClassNameForButton() {\n            // @ts-ignore\n            const { buttons, icon } = this.data\n            buttons.forEach((btn) => {\n                if (icon) {\n                    btn.className = ''\n                } else if (btn.type === 'warn') {\n                    btn.className = 'weui-slideview__btn-group_warn'\n                } else {\n                    btn.className = 'weui-slideview__btn-group_default'\n                }\n            })\n            this.setData({\n                buttons\n            })\n        },\n        buttonTapByWxs(data) {\n            this.triggerEvent('buttontap', data, {})\n        },\n        hide() {\n            this.triggerEvent('hide', {}, {})\n        },\n        show() {\n            this.triggerEvent('show', {}, {})\n        },\n        transitionEnd() {}\n    }\n})\n"
  },
  {
    "path": "src/components/slideview/slideview.wxml",
    "content": "<!-- slide-view/slide-view.wxml -->\n<wxs module=\"handler\" src=\"./slideview.wxs\"></wxs>\n<view wx:if=\"{{renderer === 'webview'}}\" class=\"weui-slideview weui-movable-view {{icon ? 'weui-slideview_icon' : ''}} {{extClass}}\" style=\"width: 100%;height: 100%;\">\n    <view bindtransitionend=\"{{handler.transitionEnd}}\"\n      show=\"{{show}}\" change:show=\"{{handler.showChange}}\"\n      rebounce=\"{{rebounce}}\" change:rebounce=\"{{handler.rebounceChange}}\"\n      duration=\"{{duration}}\" change:duration=\"{{handler.durationChange}}\"\n      change:disable=\"{{handler.disableChange}}\" disable=\"{{disable}}\"\n      change:prop=\"{{handler.sizeReady}}\" prop=\"{{size}}\"\n      bindtouchstart=\"{{handler.touchstart}}\" bindtouchmove=\"{{handler.touchmove}}\" bindtouchend=\"{{handler.touchend}}\" class=\"weui-slideview__left left\" style=\"width:100%;\">\n      <slot></slot>\n    </view>\n    <view class=\"weui-slideview__right right\">\n      <view class=\"weui-slideview__buttons\" style=\"height:100%;width:100%;\" wx:if=\"{{buttons && buttons.length}}\">\n        <view wx:for=\"{{buttons}}\" wx:key=\"index\" class='btn weui-slideview__btn__wrp {{item.className}}'>\n          <view\n            bindtap=\"{{handler.hideButton}}\"\n            data-data=\"{{item.data}}\"\n            data-index=\"{{index}}\"\n            class='weui-slideview__btn {{item.extClass}}'\n            aria-role=\"button\"\n          >\n            <text wx:if=\"{{!icon}}\">{{item.text}}</text>\n            <image class=\"weui-slideview__btn__icon\" wx:else src=\"{{item.src}}\"/>\n          </view>\n        </view>\n      </view>\n    </view>\n</view>\n<slideview-skyline\n  wx:elif=\"{{renderer === 'skyline'}}\"\n  ext-class=\"{{extClass}}\"\n  buttons=\"{{buttons}}\"\n  disable=\"{{disable}}\"\n  duration=\"{{duration}}\"\n  icon=\"{{icon}}\"\n  show=\"{{show}}\"\n  rebounce=\"{{rebounce}}\"\n  throttle=\"{{throttle}}\"\n  bind:buttontap=\"buttonTapByWxs\"\n  bind:hide=\"hide\"\n  bind:show=\"show\"\n>\n  <slot />\n</slideview-skyline>\n"
  },
  {
    "path": "src/components/slideview/slideview.wxs",
    "content": "/* eslint-disable */\nvar touchstart = function(event, ownerInstance) {\n    var ins = event.instance\n    var st = ins.getState()\n    if (st.disable) return // disable的逻辑\n    // console.log('touchstart st', JSON.stringify(st))\n    if (!st.size) return\n    // console.log('touchstart', JSON.stringify(event))\n    st.isMoving = true\n    st.startX = event.touches[0].pageX\n    st.startY = event.touches[0].pageY\n    st.firstAngle = 0\n}\nvar touchmove = function(event, ownerInstance) {\n    var ins = event.instance\n    var st = ins.getState()\n    if (!st.size || !st.isMoving || st.disable) return\n    // console.log('touchmove', JSON.stringify(event))\n    var pagex = event.touches[0].pageX - st.startX\n    var pagey = event.touches[0].pageY - st.startY\n    // 左侧45度角为界限，大于45度则允许水平滑动\n    if (st.firstAngle === 0) {\n        st.firstAngle = Math.abs(pagex) - Math.abs(pagey)\n    }\n    if (st.firstAngle < 0) {\n        return\n    }\n    var movex = pagex > 0 ? Math.min(st.max, pagex) : Math.max(-st.max, pagex)\n    // 往回滑动的情况\n    if (st.out) {\n        // 已经是划出来了，还要往左滑动，忽略\n        if (movex < 0) return\n        ins.setStyle({\n            'transform': 'translateX(' + (st.transformx + movex) + 'px)',\n            'transition': ''\n        })\n        var btns = ownerInstance.selectAllComponents('.btn')\n        var transformTotal = 0\n        var len = btns.length\n        var i = len - 1;\n        for (;i >= 0; i--) {\n            var transform = st.size.buttons[i].width / st.max * movex\n            var transformx = st.size.buttons[i].max - Math.min(st.size.buttons[i].max, transform + transformTotal)\n            btns[i].setStyle({\n                'transform': 'translateX(' + (-transformx) + 'px)',\n                'transition': ''\n            })\n            transformTotal += transform\n        }\n        return false\n    }\n    if (movex > 0) movex = 0\n    ins.setStyle({\n        'transform': 'translateX(' + movex + 'px)',\n        'transition': ''\n    })\n    st.transformx = movex\n    var btns = ownerInstance.selectAllComponents('.btn')\n    var transformTotal = 0\n    var len = btns.length\n    var i = len - 1;\n    for (;i >= 0; i--) {\n        var transform = st.size.buttons[i].width / st.max * movex\n        var transformx = Math.max(-st.size.buttons[i].max, transform + transformTotal)\n        btns[i].setStyle({\n            'transform': 'translateX(' + transformx + 'px)',\n            'transition': ''\n        })\n        st.size.buttons[i].transformx = transformx\n        transformTotal += transform\n    }\n    return false // 禁止垂直方向的滑动\n}\nvar touchend = function(event, ownerInstance) {\n    var ins = event.instance\n    var st = ins.getState()\n    if (!st.size || !st.isMoving || st.disable) return\n    // 左侧45度角为界限，大于45度则允许水平滑动\n    if (st.firstAngle < 0) {\n        return\n    }\n    var duration = st.duration / 1000\n    st.isMoving = false\n    // console.log('touchend', JSON.stringify(event))\n    var btns = ownerInstance.selectAllComponents('.btn')\n    var len = btns.length\n    var i = len - 1\n    // console.log('len size', len)\n    if (Math.abs(event.changedTouches[0].pageX - st.startX) < st.throttle || event.changedTouches[0].pageX - st.startX > 0) { // 方向也要控制\n        st.out = false\n        ins.setStyle({\n            'transform': 'translate3d(0px, 0, 0)',\n            'transition': 'transform ' + (duration) + 's'\n        })\n        for (;i >= 0; i--) {\n            btns[i].setStyle({\n                'transform': 'translate3d(0px, 0, 0)',\n                'transition': 'transform ' + (duration) + 's'\n            })\n        }\n        ownerInstance.callMethod('hide')\n        return\n    }\n    showButtons(ins, ownerInstance, duration)\n    ownerInstance.callMethod('show')\n}\nvar REBOUNCE_TIME = 0.2\nvar showButtons = function(ins, ownerInstance, withDuration) {\n    var st = ins.getState()\n    if (!st.size) return\n    var rebounceTime = st.rebounce ? REBOUNCE_TIME : 0\n    var movex = st.max\n    st.out = true\n    var btns = ownerInstance.selectAllComponents('.btn')\n    var rebounce = st.rebounce || 0\n    var len = btns.length\n    var i = len - 1\n    ins.setStyle({\n        'transform': 'translate3d(' + (-movex - rebounce) + 'px, 0, 0)',\n        'transition': 'transform ' + (withDuration) + 's'\n    })\n    st.transformx = -movex\n    var transformTotal = 0\n    for (;i >= 0; i--) {\n        var transform = st.size.buttons[i].width / st.max * movex\n        var transformx = (-(transform + transformTotal))\n        btns[i].setStyle({\n            'transform': 'translate3d(' + transformx + 'px, 0, 0)',\n            'transition': 'transform ' + (withDuration ? withDuration + rebounceTime : withDuration) + 's'\n        })\n        st.size.buttons[i].transformx = transformx\n        transformTotal += transform\n    }\n}\nvar innerHideButton = function(ownerInstance) {\n    var ins = ownerInstance.selectComponent('.left')\n    var st = ins.getState()\n    if (!st.size) return\n    var duration = st.duration ? st.duration / 1000 : 0\n    var btns = ownerInstance.selectAllComponents('.btn')\n    var len = btns.length\n    var i = len - 1\n    ins.setStyle({\n        'transform': 'translate3d(0px, 0, 0)',\n        'transition': 'transform ' + (duration) + 's'\n    })\n    st.transformx = 0\n    st.out = false\n    for (;i >= 0; i--) {\n        btns[i].setStyle({\n            'transform': 'translate3d(0px, 0, 0)',\n            'transition': 'transform ' + (duration) + 's'\n        })\n        st.size.buttons[i].transformx = 0\n    }\n}\nvar hideButton = function(event, ownerInstance) {\n    innerHideButton(ownerInstance)\n    ownerInstance.callMethod('buttonTapByWxs', {index: event.currentTarget.dataset.index, data: event.currentTarget.dataset.data})\n    return false\n}\nvar sizeReady = function(newVal, oldVal, ownerInstance, ins) {\n    var st = ins.getState()\n    // st.disable = newVal && newVal.disable\n    if (newVal && newVal.button && newVal.buttons) {\n        st.size = newVal\n        st.transformx = 0\n        // var min = newVal.button.width\n        var max = 0\n        var len = newVal.buttons.length\n        var i = newVal.buttons.length - 1;\n        var total = 0\n        for (; i >= 0; i--) {\n            max += newVal.buttons[i].width\n            // if (min > newVal.buttons[i]) {\n            //     min = newVal.buttons[i].width\n            // }\n            total += newVal.buttons[i].width\n            newVal.buttons[i].max = total\n            newVal.buttons[i].transformx = 0\n        }\n        st.throttle = st.size.throttle || 40 // 固定值\n        st.rebounce = st.size.rebounce\n        st.max = max\n        ownerInstance.selectComponent('.right').setStyle({\n            'line-height': newVal.button.height + 'px',\n            left: (newVal.button.width) + 'px',\n            width: max + 'px'\n        })\n        // console.log('st size', JSON.stringify(newVal))\n        if (!st.size.disable && st.size.show) {\n            showButtons(ins, ownerInstance)\n        }\n    }\n}\nvar disableChange = function(newVal, oldVal, ownerInstance, ins) {\n    var st = ins.getState()\n    st.disable = newVal\n}\nvar durationChange = function(newVal, oldVal, ownerInstance, ins) {\n    var st = ins.getState()\n    st.duration = newVal || 400\n}\nvar showChange = function(newVal, oldVal, ownerInstance, ins) {\n    var st = ins.getState()\n    st.show = newVal\n    if (st.disable) return\n    // console.log('show change')\n    if (st.show) {\n        showButtons(ins, ownerInstance, st.duration / 1000)\n    } else {\n        innerHideButton(ownerInstance)\n    }\n}\nvar rebounceChange = function(newVal, oldVal, ownerInstance, ins) {\n    var st = ins.getState()\n    // console.log('rebounce', st.rebounce)\n    st.rebounce = newVal\n}\nvar transitionEnd = function(event, ownerInstance) {\n    // console.log('transition')\n    var ins = event.instance\n    var st = ins.getState()\n    // 回弹效果\n    if (st.out && st.rebounce) {\n        // console.log('transition rebounce', st.rebounce)\n        ins.setStyle({\n            'transform': 'translate3d(' + (-st.max) + 'px, 0, 0)',\n            'transition': 'transform ' + REBOUNCE_TIME +'s'\n        })\n    }\n}\nmodule.exports = {\n    touchstart: touchstart,\n    touchmove: touchmove,\n    touchend: touchend,\n    hideButton: hideButton,\n    sizeReady: sizeReady,\n    disableChange: disableChange,\n    durationChange: durationChange,\n    showChange: showChange,\n    rebounceChange: rebounceChange,\n    transitionEnd: transitionEnd\n}"
  },
  {
    "path": "src/components/tabbar/__test__/__snapshots__/tabbar.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`tabbar basic 1`] = `\n<main>\n  <mp-tabbar\n    id=\"tabbar\"\n    style=\"position:fixed;bottom:0;width:100%;left:0;right:0;\"\n    bind:change=\"tabChange\"\n  >\n    <wx-root-portal\n      enable=\"{{true}}\"\n    >\n      <wx-view\n        class=\"root-portal-box\"\n      >\n        <wx-view\n          ariaRole=\"tablist\"\n          class=\"weui-tabbar weui-tabbar__reactive \"\n        >\n          <wx-view\n            ariaDescribedby=\"t0_tips\"\n            ariaLabelledby=\"t0_title\"\n            ariaRole=\"tab\"\n            ariaSelected=\"{{true}}\"\n            class=\"weui-tabbar__item weui-bar__item_on\"\n            data-index=\"{{0}}\"\n            bind:tap=\"tabChange\"\n          >\n            <wx-view\n              ariaHidden=\"true\"\n              id=\"t0_tips\"\n            >\n              <wx-image\n                class=\"weui-tabbar__icon\"\n                src=\"/icon.selected\"\n              />\n              <mp-badge\n                style=\"position: absolute;top:-2px;left:calc(100% - 3px)\"\n              >\n                <wx-view\n                  ariaLabel=\"\"\n                  class=\"weui-badge  \"\n                >\n                  8\n                </wx-view>\n              </mp-badge>\n            </wx-view>\n            <wx-view\n              ariaHidden=\"true\"\n              class=\"weui-tabbar__label\"\n              id=\"t0_title\"\n            >\n              微信\n            </wx-view>\n          </wx-view>\n          <wx-view\n            ariaDescribedby=\"t1_tips\"\n            ariaLabelledby=\"t1_title\"\n            ariaRole=\"tab\"\n            ariaSelected=\"{{false}}\"\n            class=\"weui-tabbar__item \"\n            data-index=\"{{1}}\"\n            bind:tap=\"tabChange\"\n          >\n            <wx-view\n              ariaHidden=\"true\"\n              id=\"t1_tips\"\n            >\n              <wx-image\n                class=\"weui-tabbar__icon\"\n                src=\"/icon\"\n              />\n            </wx-view>\n            <wx-view\n              ariaHidden=\"true\"\n              class=\"weui-tabbar__label\"\n              id=\"t1_title\"\n            >\n              通讯录\n            </wx-view>\n          </wx-view>\n          <wx-view\n            ariaDescribedby=\"t2_tips\"\n            ariaLabelledby=\"t2_title\"\n            ariaRole=\"tab\"\n            ariaSelected=\"{{false}}\"\n            class=\"weui-tabbar__item \"\n            data-index=\"{{2}}\"\n            bind:tap=\"tabChange\"\n          >\n            <wx-view\n              ariaHidden=\"true\"\n              id=\"t2_tips\"\n            >\n              <wx-image\n                class=\"weui-tabbar__icon\"\n                src=\"/icon\"\n              />\n              <mp-badge\n                style=\"position: absolute;top:-2px;left:calc(100% - 3px)\"\n              >\n                <wx-view\n                  ariaLabel=\"\"\n                  class=\"weui-badge  weui-badge_dot\"\n                >\n                  \n                </wx-view>\n              </mp-badge>\n            </wx-view>\n            <wx-view\n              ariaHidden=\"true\"\n              class=\"weui-tabbar__label\"\n              id=\"t2_title\"\n            >\n              发现\n            </wx-view>\n          </wx-view>\n          <wx-view\n            ariaDescribedby=\"t3_tips\"\n            ariaLabelledby=\"t3_title\"\n            ariaRole=\"tab\"\n            ariaSelected=\"{{false}}\"\n            class=\"weui-tabbar__item \"\n            data-index=\"{{3}}\"\n            bind:tap=\"tabChange\"\n          >\n            <wx-view\n              ariaHidden=\"true\"\n              id=\"t3_tips\"\n            >\n              <wx-image\n                class=\"weui-tabbar__icon\"\n                src=\"/icon\"\n              />\n            </wx-view>\n            <wx-view\n              ariaHidden=\"true\"\n              class=\"weui-tabbar__label\"\n              id=\"t3_title\"\n            >\n              我\n            </wx-view>\n          </wx-view>\n        </wx-view>\n      </wx-view>\n    </wx-root-portal>\n  </mp-tabbar>\n</main>\n`;\n"
  },
  {
    "path": "src/components/tabbar/__test__/tabbar.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('tabbar', () => {\n    const tabbar = simulate.load(path.resolve(__dirname, '../tabbar'), 'mp-tabbar')\n\n    test('basic', async () => {\n        const tabChange = jest.fn()\n        const tablist = [\n            {\n                text: '微信',\n                iconPath: '/icon',\n                selectedIconPath: '/icon.selected',\n                badge: '8'\n            },\n            {\n                text: '通讯录',\n                iconPath: '/icon',\n                selectedIconPath: '/icon.selected'\n            },\n            {\n                text: '发现',\n                iconPath: '/icon',\n                selectedIconPath: '/icon.selected',\n                dot: true\n            },\n            {\n                text: '我',\n                iconPath: '/icon',\n                selectedIconPath: '/icon.selected'\n            }\n        ]\n        const comp = simulate.render(\n            simulate.load({\n                usingComponents: {\n                    'mp-tabbar': tabbar\n                },\n                template: `\n                    <mp-tabbar id=\"tabbar\" style=\"position:fixed;bottom:0;width:100%;left:0;right:0;\" list=\"{{list}}\" bindchange=\"tabChange\"></mp-tabbar>\n                `,\n                data: {\n                    list: tablist\n                },\n                methods: {\n                    tabChange\n                }\n            })\n        )\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        const tabbarComp = comp.querySelector('#tabbar')\n        const tabs = tabbarComp.querySelectorAll('.weui-tabbar__item')\n        tabs[2].dispatchEvent('tap')\n        await simulate.sleep(0)\n        expect(tabbarComp.data.current).toBe(2)\n        expect(tabChange).toBeCalledTimes(1)\n        expect(tabChange.mock.calls[0][0].detail).toStrictEqual({ index: 2, item: tablist[2] })\n    })\n})\n"
  },
  {
    "path": "src/components/tabbar/tabbar.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {\n        \"mp-badge\": \"../badge/badge\"\n    }\n}"
  },
  {
    "path": "src/components/tabbar/tabbar.less",
    "content": "@import \"~weui-wxss/src/style/base/fn.less\";\n\n// @media only screen and (min-width: 450px) {\n//   .weui-tabbar__reactive {\n//     flex-direction: column;\n\n//     width: 60px;\n//     height: 100%;\n\n//     &:before {\n//       left: unset;\n//       height: unset;\n//       .setRightLine(@weuiLineColorLight);\n//     }\n\n//     .weui-tabbar__item {\n//       flex: none;\n//     }\n//   }\n// }\n\n.weui-tabbar {\n  width: 100%;\n}\n"
  },
  {
    "path": "src/components/tabbar/tabbar.ts",
    "content": "Component({\n    properties: {\n        extClass: {\n            type: String,\n            value: ''\n        },\n        list: {\n            type: Array,\n            value: []\n        },\n        current: {\n            type: Number,\n            value: 0\n        },\n        reactive: {\n            type: Boolean,\n            value: true\n        }\n    },\n    methods: {\n        tabChange(e) {\n            const { index } = e.currentTarget.dataset\n            if (index === this.data.current) {\n                return\n            }\n            this.setData({\n                current: index\n            })\n            this.triggerEvent('change', { index, item: this.data.list[index] })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/tabbar/tabbar.wxml",
    "content": "<view class=\"weui-tabbar {{reactive ? 'weui-tabbar__reactive' : ''}} {{extClass}}\" aria-role=\"tablist\">\n  <!-- 选中的时候往 weui-tabbar__item 加 class:weui-bar__item_on -->\n  <view\n    wx:for=\"{{list}}\"\n    wx:key=\"index\"\n    data-index='{{index}}'\n    bindtap=\"tabChange\"\n    class=\"weui-tabbar__item {{index === current ? 'weui-bar__item_on' : ''}}\"\n    aria-role=\"tab\"\n    aria-labelledby=\"t{{index}}_title\"\n    aria-describedby=\"t{{index}}_tips\"\n    aria-selected=\"{{index === current}}\"\n  >\n    <view\n      id=\"t{{index}}_tips\"\n      aria-hidden=\"true\"\n      style=\"position: relative;display:inline-block;\"\n    >\n      <image src=\"{{current === index ? item.selectedIconPath : item.iconPath}}\" class=\"weui-tabbar__icon\"></image>\n      <mp-badge wx:if=\"{{item.badge || item.dot}}\" content=\"{{item.badge}}\" aria-label=\"{{item.ariaLabel || ''}}\" style=\"position: absolute;top:-2px;left:calc(100% - 3px)\"></mp-badge>\n    </view>\n    <view id=\"t{{index}}_title\" aria-hidden=\"true\" class=\"weui-tabbar__label\">{{item.text}}</view>\n  </view>\n</view>"
  },
  {
    "path": "src/components/toptips/__test__/__snapshots__/toptips.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`toptips auto hide 1`] = `\n<main>\n  <mp-toptips>\n    <wx-root-portal\n      enable=\"{{true}}\"\n    >\n      <wx-view\n        ariaRole=\"alert\"\n        class=\"weui-toptips weui-toptips_warn weui-toptips_success \"\n      >\n        500ms后关闭\n      </wx-view>\n    </wx-root-portal>\n  </mp-toptips>\n</main>\n`;\n\nexports[`toptips auto hide 2`] = `\n<main>\n  <mp-toptips>\n    <wx-root-portal\n      enable=\"{{true}}\"\n    >\n      <wx-view\n        ariaRole=\"alert\"\n        class=\"weui-toptips weui-toptips_warn weui-toptips_success \"\n      >\n        500ms后关闭\n      </wx-view>\n    </wx-root-portal>\n  </mp-toptips>\n</main>\n`;\n\nexports[`toptips basic 1`] = `\n<mp-toptips>\n  <wx-root-portal\n    enable=\"{{true}}\"\n  >\n    <wx-view\n      ariaRole=\"alert\"\n      class=\"weui-toptips weui-toptips_warn weui-toptips_error top100\"\n    >\n      距离顶部100px\n    </wx-view>\n  </wx-root-portal>\n</mp-toptips>\n`;\n"
  },
  {
    "path": "src/components/toptips/__test__/toptips.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n\ndescribe('toptips', () => {\n    const toptips = simulate.load(path.resolve(__dirname, '../toptips'), 'mp-toptips')\n\n    test('basic', async () => {\n        const comp = simulate.render(toptips, {\n            extClass: 'top100',\n            msg: '距离顶部100px',\n            type: 'error',\n            show: true\n        })\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n\n    test('auto hide', async () => {\n        const comp = simulate.render(\n            simulate.load({\n                usingComponents: {\n                    'mp-toptips': toptips\n                },\n                template: `\n                    <mp-toptips msg=\"500ms后关闭\" type=\"success\" delay=\"{{500}}\" show=\"{{show}}\" />\n                `,\n                data: {\n                    show: false\n                }\n            })\n        )\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        comp.setData({ show: true })\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        await simulate.sleep(600)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n})\n"
  },
  {
    "path": "src/components/toptips/toptips.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {}\n}"
  },
  {
    "path": "src/components/toptips/toptips.less",
    "content": ".weui-toptips {\n    display: flex;\n}\n.weui-toptips_success {\n    background-color: var(--weui-BRAND);\n}\n.weui-toptips_error {\n    background-color: var(--weui-RED);\n}\n.weui-toptips_info {\n    background-color: var(--weui-BLUE);\n}\n"
  },
  {
    "path": "src/components/toptips/toptips.ts",
    "content": "const typeClassMap = {\n    warn: 'weui-toptips_warn',\n    info: 'weui-toptips_info',\n    success: 'weui-toptips_success',\n    error: 'weui-toptips_error'\n}\n\nComponent({\n    options: {\n\n    },\n    properties: {\n        type: {\n            type: String,\n            value: 'error',\n            observer: '_typeChange'\n        },\n        show: {\n            type: Boolean,\n            value: false,\n            observer: '_showChange'\n        },\n        msg: {\n            type: String,\n            value: ''\n        },\n        delay: {\n            type: Number,\n            value: 2000\n        },\n        extClass: {\n            type: String,\n            value: ''\n        },\n        rootPortal: {\n            // 是否使用 root-portal\n            type: Boolean,\n            value: false\n        }\n    },\n    data: {\n        wrapperShow: false,\n        innerShow: false\n    },\n    lifetimes: {\n        ready() {\n            this._showChange(this.data.show)\n        },\n        attached() {\n            this._typeChange(this.data.type)\n        }\n    },\n    methods: {\n        _typeChange(type) {\n            this.setData({\n                className: typeClassMap[type] || ''\n            })\n        },\n        _showChange(show) {\n            if (show) {\n                this._showToptips()\n            } else {\n                this._hideToptips()\n            }\n        },\n        _showToptips() {\n            if (this.data.delay) {\n                setTimeout(() => {\n                    this._hideToptips()\n                    this.setData(\n                        {\n                            show: false\n                        },\n                        () => {\n                            // tooltips 隐藏了，触发 hide 事件\n                            this.triggerEvent('hide', {}, {})\n                        }\n                    )\n                }, this.data.delay)\n            }\n            this.setData({\n                wrapperShow: true,\n                innerShow: true\n            })\n        },\n        _hideToptips() {\n            if (!this.data.innerShow) return\n            this.setData({ innerShow: false })\n            setTimeout(() => {\n                this.setData({ wrapperShow: false })\n            }, 300)\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/toptips/toptips.wxml",
    "content": "<template name=\"body\">\n    <view\n        aria-role=\"alert\"\n        class=\"weui-toptips weui-toptips_warn {{className}} {{extClass}} {{innerShow ? 'weui-animate-fade-in' :  'weui-animate-fade-out'}}\"\n    >\n        <block wx:if=\"{{msg}}\">{{msg}}</block>\n        <block wx:else>\n            <slot></slot>\n        </block>\n    </view>\n</template>\n\n<root-portal enable=\"{{true}}\" wx:if=\"{{rootPortal && wrapperShow}}\">\n    <template is=\"body\" data=\"{{className, extClass, innerShow, msg}}\" />\n</root-portal>\n<block wx:elif=\"{{!rootPortal && wrapperShow}}\">\n    <template is=\"body\" data=\"{{className, extClass, innerShow, msg}}\" />\n</block>\n"
  },
  {
    "path": "src/components/uploader/__test__/__snapshots__/uploader.test.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`uploader basic 1`] = `\n<main>\n  <mp-uploader\n    id=\"uploader\"\n  >\n    <wx-view\n      class=\"weui-uploader \"\n    >\n      <wx-view\n        class=\"weui-uploader__hd\"\n      >\n        <wx-view\n          class=\"weui-uploader__overview\"\n        >\n          <wx-view\n            class=\"weui-uploader__title\"\n          >\n            图片上传\n          </wx-view>\n          <wx-view\n            class=\"weui-uploader__info\"\n          >\n            0/5\n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"weui-uploader__tips\"\n        >\n          图片上传提示\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-uploader__bd\"\n      >\n        <wx-view\n          class=\"weui-uploader__files\"\n        />\n        <wx-view\n          class=\"weui-uploader__input-box\"\n          hoverClass=\"weui-active\"\n        >\n          <wx-view\n            class=\"weui-uploader__input\"\n            bind:tap=\"chooseImage\"\n          />\n        </wx-view>\n      </wx-view>\n    </wx-view>\n    <mp-gallery\n      class=\"gallery\"\n      current=\"\"\n      hideOnClick=\"{{true}}\"\n      imgUrls=\"{{Array []}}\"\n      show=\"{{false}}\"\n      showDelete=\"{{true}}\"\n      bind:delete=\"deletePic\"\n    />\n  </mp-uploader>\n</main>\n`;\n\nexports[`uploader basic 2`] = `\n<main>\n  <mp-uploader\n    id=\"uploader\"\n  >\n    <wx-view\n      class=\"weui-uploader \"\n    >\n      <wx-view\n        class=\"weui-uploader__hd\"\n      >\n        <wx-view\n          class=\"weui-uploader__overview\"\n        >\n          <wx-view\n            class=\"weui-uploader__title\"\n          >\n            图片上传\n          </wx-view>\n          <wx-view\n            class=\"weui-uploader__info\"\n          >\n            1/5\n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"weui-uploader__tips\"\n        >\n          图片上传提示\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-uploader__bd\"\n      >\n        <wx-view\n          class=\"weui-uploader__files\"\n        >\n          <wx-view\n            class=\"weui-uploader__file weui-uploader__file_status\"\n            data-index=\"{{0}}\"\n            bind:tap=\"previewImage\"\n          >\n            <wx-image\n              class=\"weui-uploader__img\"\n              mode=\"aspectFill\"\n              src=\"/a/b.png\"\n            />\n            <wx-view\n              class=\"weui-uploader__file-content\"\n            >\n              <wx-view\n                class=\"weui-loading\"\n              />\n            </wx-view>\n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"weui-uploader__input-box\"\n          hoverClass=\"weui-active\"\n        >\n          <wx-view\n            class=\"weui-uploader__input\"\n            bind:tap=\"chooseImage\"\n          />\n        </wx-view>\n      </wx-view>\n    </wx-view>\n    <mp-gallery\n      class=\"gallery\"\n      current=\"\"\n      hideOnClick=\"{{true}}\"\n      imgUrls=\"{{Array []}}\"\n      show=\"{{false}}\"\n      showDelete=\"{{true}}\"\n      bind:delete=\"deletePic\"\n    />\n  </mp-uploader>\n</main>\n`;\n\nexports[`uploader preview 1`] = `\n<mp-uploader>\n  <wx-view\n    class=\"weui-uploader \"\n  >\n    <wx-view\n      class=\"weui-uploader__hd\"\n    >\n      <wx-view\n        class=\"weui-uploader__overview\"\n      >\n        <wx-view\n          class=\"weui-uploader__title\"\n        >\n          图片上传\n        </wx-view>\n        <wx-view\n          class=\"weui-uploader__info\"\n        >\n          1/5\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-uploader__tips\"\n      >\n        图片上传提示\n      </wx-view>\n    </wx-view>\n    <wx-view\n      class=\"weui-uploader__bd\"\n    >\n      <wx-view\n        class=\"weui-uploader__files\"\n      >\n        <wx-view\n          class=\"weui-uploader__file\"\n          data-index=\"{{0}}\"\n          bind:tap=\"previewImage\"\n        >\n          <wx-image\n            class=\"weui-uploader__img\"\n            mode=\"aspectFill\"\n            src=\"http://qq.com/image.png\"\n          />\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-uploader__input-box\"\n        hoverClass=\"weui-active\"\n      >\n        <wx-view\n          class=\"weui-uploader__input\"\n          bind:tap=\"chooseImage\"\n        />\n      </wx-view>\n    </wx-view>\n  </wx-view>\n  <mp-gallery\n    class=\"gallery\"\n    current=\"\"\n    hideOnClick=\"{{true}}\"\n    imgUrls=\"{{Array []}}\"\n    show=\"{{false}}\"\n    showDelete=\"{{true}}\"\n    bind:delete=\"deletePic\"\n  />\n</mp-uploader>\n`;\n\nexports[`uploader preview 2`] = `\n<mp-uploader>\n  <wx-view\n    class=\"weui-uploader \"\n  >\n    <wx-view\n      class=\"weui-uploader__hd\"\n    >\n      <wx-view\n        class=\"weui-uploader__overview\"\n      >\n        <wx-view\n          class=\"weui-uploader__title\"\n        >\n          图片上传\n        </wx-view>\n        <wx-view\n          class=\"weui-uploader__info\"\n        >\n          1/5\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-uploader__tips\"\n      >\n        图片上传提示\n      </wx-view>\n    </wx-view>\n    <wx-view\n      class=\"weui-uploader__bd\"\n    >\n      <wx-view\n        class=\"weui-uploader__files\"\n      >\n        <wx-view\n          class=\"weui-uploader__file\"\n          data-index=\"{{0}}\"\n          bind:tap=\"previewImage\"\n        >\n          <wx-image\n            class=\"weui-uploader__img\"\n            mode=\"aspectFill\"\n            src=\"http://qq.com/image.png\"\n          />\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-uploader__input-box\"\n        hoverClass=\"weui-active\"\n      >\n        <wx-view\n          class=\"weui-uploader__input\"\n          bind:tap=\"chooseImage\"\n        />\n      </wx-view>\n    </wx-view>\n  </wx-view>\n  <mp-gallery\n    class=\"gallery\"\n    current=\"{{0}}\"\n    hideOnClick=\"{{true}}\"\n    imgUrls=\"{{\n      Array [\n        \"http://qq.com/image.png\",\n      ]\n    }}\"\n    show=\"{{true}}\"\n    showDelete=\"{{true}}\"\n    bind:delete=\"deletePic\"\n  />\n</mp-uploader>\n`;\n\nexports[`uploader preview 3`] = `\n<mp-uploader>\n  <wx-view\n    class=\"weui-uploader \"\n  >\n    <wx-view\n      class=\"weui-uploader__hd\"\n    >\n      <wx-view\n        class=\"weui-uploader__overview\"\n      >\n        <wx-view\n          class=\"weui-uploader__title\"\n        >\n          图片上传\n        </wx-view>\n        <wx-view\n          class=\"weui-uploader__info\"\n        >\n          0/5\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-uploader__tips\"\n      >\n        图片上传提示\n      </wx-view>\n    </wx-view>\n    <wx-view\n      class=\"weui-uploader__bd\"\n    >\n      <wx-view\n        class=\"weui-uploader__files\"\n      />\n      <wx-view\n        class=\"weui-uploader__input-box\"\n        hoverClass=\"weui-active\"\n      >\n        <wx-view\n          class=\"weui-uploader__input\"\n          bind:tap=\"chooseImage\"\n        />\n      </wx-view>\n    </wx-view>\n  </wx-view>\n  <mp-gallery\n    class=\"gallery\"\n    current=\"{{0}}\"\n    hideOnClick=\"{{true}}\"\n    imgUrls=\"{{\n      Array [\n        \"http://qq.com/image.png\",\n      ]\n    }}\"\n    show=\"{{true}}\"\n    showDelete=\"{{true}}\"\n    bind:delete=\"deletePic\"\n  />\n</mp-uploader>\n`;\n\nexports[`uploader upload fail 1`] = `\n<main>\n  <mp-uploader\n    id=\"uploader\"\n  >\n    <wx-view\n      class=\"weui-uploader \"\n    >\n      <wx-view\n        class=\"weui-uploader__hd\"\n      >\n        <wx-view\n          class=\"weui-uploader__overview\"\n        >\n          <wx-view\n            class=\"weui-uploader__title\"\n          >\n            图片上传\n          </wx-view>\n          <wx-view\n            class=\"weui-uploader__info\"\n          >\n            0/5\n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"weui-uploader__tips\"\n        >\n          图片上传提示\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-uploader__bd\"\n      >\n        <wx-view\n          class=\"weui-uploader__files\"\n        />\n        <wx-view\n          class=\"weui-uploader__input-box\"\n          hoverClass=\"weui-active\"\n        >\n          <wx-view\n            class=\"weui-uploader__input\"\n            bind:tap=\"chooseImage\"\n          />\n        </wx-view>\n      </wx-view>\n    </wx-view>\n    <mp-gallery\n      class=\"gallery\"\n      current=\"\"\n      hideOnClick=\"{{true}}\"\n      imgUrls=\"{{Array []}}\"\n      show=\"{{false}}\"\n      showDelete=\"{{true}}\"\n      bind:delete=\"deletePic\"\n    />\n  </mp-uploader>\n</main>\n`;\n\nexports[`uploader upload fail 2`] = `\n<main>\n  <mp-uploader\n    id=\"uploader\"\n  >\n    <wx-view\n      class=\"weui-uploader \"\n    >\n      <wx-view\n        class=\"weui-uploader__hd\"\n      >\n        <wx-view\n          class=\"weui-uploader__overview\"\n        >\n          <wx-view\n            class=\"weui-uploader__title\"\n          >\n            图片上传\n          </wx-view>\n          <wx-view\n            class=\"weui-uploader__info\"\n          >\n            1/5\n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"weui-uploader__tips\"\n        >\n          图片上传提示\n        </wx-view>\n      </wx-view>\n      <wx-view\n        class=\"weui-uploader__bd\"\n      >\n        <wx-view\n          class=\"weui-uploader__files\"\n        >\n          <wx-view\n            class=\"weui-uploader__file weui-uploader__file_status\"\n            data-index=\"{{0}}\"\n            bind:tap=\"previewImage\"\n          >\n            <wx-image\n              class=\"weui-uploader__img\"\n              mode=\"aspectFill\"\n              src=\"/a/b.png\"\n            />\n            <wx-view\n              class=\"weui-uploader__file-content\"\n            >\n              <wx-view\n                class=\"weui-loading\"\n              />\n            </wx-view>\n          </wx-view>\n        </wx-view>\n        <wx-view\n          class=\"weui-uploader__input-box\"\n          hoverClass=\"weui-active\"\n        >\n          <wx-view\n            class=\"weui-uploader__input\"\n            bind:tap=\"chooseImage\"\n          />\n        </wx-view>\n      </wx-view>\n    </wx-view>\n    <mp-gallery\n      class=\"gallery\"\n      current=\"\"\n      hideOnClick=\"{{true}}\"\n      imgUrls=\"{{Array []}}\"\n      show=\"{{false}}\"\n      showDelete=\"{{true}}\"\n      bind:delete=\"deletePic\"\n    />\n  </mp-uploader>\n</main>\n`;\n"
  },
  {
    "path": "src/components/uploader/__test__/uploader.test.ts",
    "content": "import path from 'path'\nimport simulate from 'miniprogram-simulate'\n;(globalThis as any).wx = (globalThis as any).wx || {}\n;(globalThis as any).wx.chooseImage = jest.fn(({ success }) => {\n    setTimeout(() => {\n        success &&\n            success({ tempFilePaths: ['/a/b.png'], tempFiles: [{ path: '/a/b.png', size: 1024 }] })\n    }, 0)\n})\n;(globalThis as any).wx.getFileSystemManager = jest.fn(() => ({\n    readFileSync: jest.fn(() => new ArrayBuffer(1024))\n}))\n;(globalThis as any).wx.arrayBufferToBase64 = jest.fn((buffer: ArrayBuffer) => {\n    let binary = ''\n    const bytes = new Uint8Array(buffer)\n    const len = bytes.byteLength\n    for (let i = 0; i < len; i++) {\n        binary += String.fromCharCode(bytes[i])\n    }\n    return window.btoa(binary)\n})\n\ndescribe('uploader', () => {\n    const gallery = simulate.load({ template: '<slot /> ' })\n\n    const uploader = simulate.load(path.resolve(__dirname, '../uploader'), 'mp-uploader', {\n        usingComponents: {\n            'mp-gallery': gallery\n        }\n    })\n\n    test('basic', async () => {\n        const comp = simulate.render(\n            simulate.load({\n                usingComponents: {\n                    'mp-uploader': uploader,\n                    'mp-gallery': gallery\n                },\n                template: `\n                    <mp-uploader id=\"uploader\" upload=\"{{uploadFile}}\" files=\"{{files}}\" max-count=\"5\" title=\"图片上传\" tips=\"图片上传提示\"></mp-uploader>\n                `,\n                data: {\n                    files: []\n                },\n                ready() {\n                    this.setData({\n                        uploadFile: this.uploadFile.bind(this)\n                    })\n                },\n                methods: {\n                    uploadFile(files) {\n                        return Promise.resolve({ urls: ['http://qq.com/b.png'] })\n                    }\n                }\n            })\n        )\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        const uploaderComp = comp.querySelector('#uploader')\n        const chooseImg = uploaderComp.querySelector('.weui-uploader__input')\n        chooseImg.dispatchEvent('tap')\n        await simulate.sleep(100)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n\n    test('upload fail', async () => {\n        const comp = simulate.render(\n            simulate.load({\n                usingComponents: {\n                    'mp-uploader': uploader,\n                    'mp-gallery': gallery\n                },\n                template: `\n                    <mp-uploader id=\"uploader\" upload=\"{{uploadFile}}\" files=\"{{files}}\" max-count=\"5\" title=\"图片上传\" tips=\"图片上传提示\"></mp-uploader>\n                `,\n                data: {\n                    files: []\n                },\n                ready() {\n                    this.setData({\n                        uploadFile: this.uploadFile.bind(this)\n                    })\n                },\n                methods: {\n                    uploadFile(files) {\n                        return Promise.reject('error')\n                    }\n                }\n            })\n        )\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        const uploaderComp = comp.querySelector('#uploader')\n        const chooseImg = uploaderComp.querySelector('.weui-uploader__input')\n        chooseImg.dispatchEvent('tap')\n        await simulate.sleep(100)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n\n    test('preview', async () => {\n        const comp = simulate.render(uploader, {\n            files: [\n                {\n                    url: 'http://qq.com/image.png'\n                }\n            ],\n            maxCount: '5',\n            title: '图片上传',\n            tips: '图片上传提示'\n        })\n        comp.attach(document.createElement('parent-wrapper'))\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        const files = comp.querySelectorAll('.weui-uploader__file')\n        files[0].dispatchEvent('tap')\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n\n        const gallery = comp.querySelector('.gallery')\n        gallery.dispatchEvent('delete', { url: 'http://qq.com/image.png', index: 0 })\n        await simulate.sleep(0)\n        expect(comp.toJSON()).toMatchSnapshot()\n    })\n})\n"
  },
  {
    "path": "src/components/uploader/uploader.json",
    "content": "{\n    \"component\": true,\n    \"styleIsolation\": \"apply-shared\",\n    \"usingComponents\": {\n        \"mp-gallery\": \"../gallery/gallery\"\n    }\n}\n"
  },
  {
    "path": "src/components/uploader/uploader.less",
    "content": ".weui-uploader__bd,\n.weui-uploader__files {\n  display: flex; /* skyline 不支持 float */\n  flex-direction: row;\n}\n\n.weui-uploader__file,\n.weui-uploader__input-box {\n  float: none; /* skyline 不支持 float */\n}"
  },
  {
    "path": "src/components/uploader/uploader.ts",
    "content": "Component({\n    options: {\n        \n    },\n    properties: {\n        title: {\n            type: String,\n            value: '图片上传'\n        },\n        sizeType: {\n            type: Array,\n            value: ['original', 'compressed']\n        },\n        sourceType: {\n            type: Array,\n            value: ['album', 'camera']\n        },\n        maxSize: {\n            type: Number,\n            value: 5 * 1024 * 1024\n        },\n        maxCount: {\n            // 最多上传多少个文件\n            type: Number,\n            value: 1\n        },\n        files: {\n            // 当前的图片列表, {url, error, loading}\n            type: Array,\n            value: [],\n            observer(newVal) {\n                this.setData({\n                    currentFiles: newVal\n                })\n            }\n        },\n        // 修复了 properties 第一层不能放 function\n        select: {\n            // 过滤某个文件\n            type: null,\n            value: () => {}\n        },\n        upload: {\n            // 返回Promise的一个文件上传的函数\n            type: null,\n            value: null\n        },\n        tips: {\n            type: String,\n            value: ''\n        },\n        extClass: {\n            type: String,\n            value: ''\n        },\n        showDelete: {\n            // 是否显示delete按钮\n            type: Boolean,\n            value: true\n        }\n    },\n    data: {\n        currentFiles: [],\n        showPreview: false,\n        previewImageUrls: []\n    },\n    ready() {},\n    methods: {\n        previewImage(e) {\n            const { index } = e.currentTarget.dataset\n            const previewImageUrls = []\n            this.data.files.forEach((item) => {\n                previewImageUrls.push(item.url)\n            })\n            this.setData({\n                previewImageUrls,\n                previewCurrent: index,\n                showPreview: true\n            })\n        },\n        chooseImage() {\n            if (this.uploading) return\n            wx.chooseImage({\n                count: this.data.maxCount - this.data.files.length,\n                sizeType: this.data.sizeType,\n                sourceType: this.data.sourceType,\n                success: (res) => {\n                    console.log('chooseImage resp', res)\n                    // 首先检查文件大小\n                    let invalidIndex = -1\n                    // @ts-ignore\n                    res.tempFiles.forEach((item, index) => {\n                        if (item.size > this.data.maxSize) {\n                            invalidIndex = index\n                        }\n                    })\n                    console.log(`this.data.select: ${this.data.select}`)\n                    if (typeof this.data.select === 'function') {\n                        const ret = this.data.select(res)\n                        if (ret === false) {\n                            return\n                        }\n                    }\n                    if (invalidIndex >= 0) {\n                        this.triggerEvent(\n                            'fail',\n                            {\n                                type: 1,\n                                errMsg: `chooseImage:fail size exceed ${this.data.maxSize}`,\n                                total: res.tempFilePaths.length,\n                                index: invalidIndex\n                            },\n                            {}\n                        )\n                        return\n                    }\n                    // 获取文件内容\n                    const mgr = wx.getFileSystemManager()\n                    const contents: ArrayBuffer[] = res.tempFilePaths.map((item) => {\n                        // @ts-ignore\n                        const fileContent: ArrayBuffer = mgr.readFileSync(item)\n                        return fileContent\n                    })\n                    const obj = {\n                        tempFilePaths: res.tempFilePaths,\n                        tempFiles: res.tempFiles,\n                        contents\n                    }\n                    // 触发选中的事件，开发者根据内容来上传文件，上传了把上传的结果反馈到files属性里面\n                    this.triggerEvent('select', obj, {})\n                    const files = res.tempFilePaths.map((item, i) => ({\n                        loading: true,\n                        // @ts-ignore\n                        url:\n                            res.tempFilePaths[i] ||\n                            `data:image/jpg;base64,${wx.arrayBufferToBase64(contents[i])}`\n                    }))\n                    if (!files || !files.length) return\n                    if (typeof this.data.upload === 'function') {\n                        const len = this.data.files.length\n                        const newFiles = this.data.files.concat(files)\n                        this.setData({\n                            files: newFiles,\n                            currentFiles: newFiles\n                        })\n                        this.loading = true\n                        this.data\n                            .upload(obj)\n                            .then((json) => {\n                                console.log('------', json)\n                                this.loading = false\n                                if (json.urls) {\n                                    const oldFiles = this.data.files\n                                    json.urls.forEach((url, index) => {\n                                        oldFiles[len + index].url = url\n                                        oldFiles[len + index].loading = false\n                                    })\n                                    this.setData({\n                                        files: oldFiles,\n                                        currentFiles: newFiles\n                                    })\n                                    this.triggerEvent('success', json, {})\n                                } else {\n                                    this.triggerEvent(\n                                        'fail',\n                                        {\n                                            type: 3,\n                                            errMsg: 'upload file fail, urls not found'\n                                        },\n                                        {}\n                                    )\n                                }\n                            })\n                            .catch((err) => {\n                                console.log('------catch', err)\n                                this.loading = false\n                                const oldFiles = this.data.files\n                                res.tempFilePaths.forEach((item, index) => {\n                                    oldFiles[len + index].error = true\n                                    oldFiles[len + index].loading = false\n                                })\n                                this.setData({\n                                    files: oldFiles,\n                                    currentFiles: newFiles\n                                })\n                                this.triggerEvent(\n                                    'fail',\n                                    {\n                                        type: 3,\n                                        errMsg: 'upload file fail',\n                                        error: err\n                                    },\n                                    {}\n                                )\n                            })\n                    }\n                },\n                fail: (fail: any) => {\n                    if (fail.errMsg.indexOf('chooseImage:fail cancel') >= 0) {\n                        this.triggerEvent('cancel', {}, {})\n                        return\n                    }\n                    fail.type = 2\n                    this.triggerEvent('fail', fail, {})\n                }\n            })\n        },\n        deletePic(e) {\n            const index = e.detail.index\n            const files = this.data.files\n            const file = files.splice(index, 1)\n            this.setData({\n                files,\n                currentFiles: files\n            })\n            this.triggerEvent('delete', { index, item: file[0] })\n        }\n    }\n})\n"
  },
  {
    "path": "src/components/uploader/uploader.wxml",
    "content": "<view class=\"weui-uploader {{extClass}}\">\n    <view class=\"weui-uploader__hd\">\n      <view class=\"weui-uploader__overview\">\n          <view class=\"weui-uploader__title\">{{title}}</view>\n          <view class=\"weui-uploader__info\" wx:if=\"{{maxCount > 1}}\">{{currentFiles.length}}/{{maxCount}}</view>\n\n      </view>\n        <view wx:if=\"{{tips}}\" class=\"weui-uploader__tips\">{{tips}}</view>\n        <view wx:else><slot name=\"tips\"></slot></view>\n    </view>\n    <view class=\"weui-uploader__bd\">\n        <view class=\"weui-uploader__files\">\n            <block wx:for=\"{{currentFiles}}\" wx:key=\"*this\">\n                <view wx:if=\"{{item.error}}\" data-index=\"{{index}}\" bindtap=\"previewImage\" class=\"weui-uploader__file weui-uploader__file_status\">\n                    <image class=\"weui-uploader__img\" src=\"{{item.url}}\" mode=\"aspectFill\" />\n                    <view class=\"weui-uploader__file-content\">\n                        <icon type=\"warn\" size=\"23\" color=\"#F43530\"></icon>\n                    </view>\n                </view>\n                <view wx:elif=\"{{item.loading}}\" data-index=\"{{index}}\" bindtap=\"previewImage\" class=\"weui-uploader__file weui-uploader__file_status\">\n                    <image class=\"weui-uploader__img\" src=\"{{item.url}}\" mode=\"aspectFill\" />\n                    <view class=\"weui-uploader__file-content\">\n                    <view class=\"weui-loading\"></view>\n                    </view>\n                </view>\n                <view wx:else class=\"weui-uploader__file\" data-index=\"{{index}}\" bindtap=\"previewImage\">\n                    <image class=\"weui-uploader__img\" src=\"{{item.url}}\" mode=\"aspectFill\" />\n                </view>\n            </block>\n        </view>\n        <view wx:if=\"{{currentFiles.length < maxCount}}\" class=\"weui-uploader__input-box\" hover-class=\"weui-active\">\n            <view class=\"weui-uploader__input\" bindtap=\"chooseImage\"></view>\n        </view>\n    </view>\n</view>\n<mp-gallery class=\"gallery\" hide-on-click=\"{{true}}\" show-delete=\"{{showDelete}}\" show=\"{{showPreview}}\" binddelete=\"deletePic\" img-urls=\"{{previewImageUrls}}\" current=\"{{previewCurrent}}\"></mp-gallery>\n"
  },
  {
    "path": "src/components/utils/object.ts",
    "content": "export const diff = (old, newVal) => {\n    if ((!old && newVal) || (old && !newVal)) return true\n    for (const k in newVal) {\n        if (old[k] !== newVal[k]) return true\n    }\n    for (const k in old) {\n        if (old[k] !== newVal[k]) return true\n    }\n    return false\n}\nexport const diffObject = (old, newVal) => {\n    if (!old && newVal) return newVal\n    if (!newVal && old) return old\n    const diffObj = {}\n    let isDiff = false\n    for (const k in newVal) {\n        if (old[k] !== newVal[k]) {\n            isDiff = true\n            diffObj[k] = newVal[k]\n        }\n    }\n    for (const k in old) {\n        if (old[k] !== newVal[k]) {\n            isDiff = true\n            diffObj[k] = newVal[k]\n        }\n    }\n    return isDiff ? diffObj : null\n}\n"
  },
  {
    "path": "src/components/utils/string.ts",
    "content": "/**\n * 占位替换\n * @method sprintf\n * @method String.prototype.sprintf\n * @example\n * \"my name is %s  %s\".sprintf(\"a\",\"b\")  =》\"my name is a  b\"\n */\nexport const sprintf = (...args): string => {\n    let i\n    let result = args[0] || ''\n    let para\n    let reg\n    const length = args.length - 1\n\n    if (length < 1) {\n        return result\n    }\n\n    i = 1\n    while (i < length + 1) {\n        result = result.replace(/%s/, '{#' + i + '#}')\n        i++\n    }\n    result.replace('%s', '')\n\n    i = 1\n    // eslint-disable-next-line\n    while (true) {\n        para = args[i]\n        if (para === undefined) {\n            // 0 也是可能的替换数字\n            break\n        }\n        reg = new RegExp('{#' + i + '#}', 'g')\n        result = result.replace(reg, para)\n        i++\n    }\n    return result\n}\n"
  },
  {
    "path": "src/components/utils/utils.less",
    "content": "page {\n    --bottom-safe-area: 68rpx;\n}\n\n.bottom-line {\n    position: relative;\n  \n    &::after {\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 200%;\n      height: 200%;\n      transform: scale(.5);\n      transform-origin: 0 0;\n      pointer-events: none;\n      box-sizing: border-box;\n      border: 0 solid #e9eaec;\n      border-bottom-width: 1px;\n    }\n}\n  \n.bottom-line-no-last {\n    .bottom-line;\n  \n    &:last-child::after {\n      content: none;\n    }\n}\n  \n.bold {\n    font-weight: bolder;\n}\n  \n.flex {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n}\n  \n.active {\n    position: relative;\n  \n    &:active:before {\n      content: \"\";\n      background: rgba(black, .03);\n      position: absolute;\n      width: 100%;\n      height: 100%;\n      right: 0;\n      top: 0;\n    }\n}\n  \n@green: #07C160;\n@red: #FA5151;\n"
  },
  {
    "path": "src/example/actionsheet/actionsheet.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    open: function () {\n        wx.showActionSheet({\n            itemList: ['A', 'B', 'C'],\n            success: function (res) {\n                if (!res.cancel) {\n                    console.log(res.tapIndex)\n                }\n            }\n        })\n    },\n    data: {\n        showDialog: false,\n        groups: [\n            { text: '示例菜单', value: 1 },\n            { text: '示例菜单', value: 2 },\n            { text: '负向菜单', type: 'warn', value: 3 }\n        ]\n    },\n    openDialog: function () {\n        this.setData({\n            showDialog: true\n        })\n    },\n    closeDialog: function () {\n        this.setData({\n            showDialog: false\n        })\n    },\n    btnClick(e) {\n        console.log(e)\n        this.closeDialog()\n    }\n})\n"
  },
  {
    "path": "src/example/actionsheet/actionsheet.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-actionSheet\": \"../../components/actionsheet/actionsheet\",\n    \"mp-icon\": \"../../components/icon/icon\"\n  }\n}\n"
  },
  {
    "path": "src/example/actionsheet/actionsheet.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"ActionSheet\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">ActionSheet</view>\n            <view class=\"page__desc\">弹出式菜单</view>\n        </view>\n        <view class=\"page__bd\">\n            <view class=\"weui-btn-area\">\n                <!-- <button class=\"weui-btn\" type=\"default\" bindtap=\"open\">原生 ActionSheet</button> -->\n                <button class=\"weui-btn\" type=\"default\" bindtap=\"openDialog\">模拟 ActionSheet</button>\n            </view>\n        </view>\n        <mp-actionSheet bindactiontap=\"btnClick\" show=\"{{showDialog}}\" actions=\"{{groups}}\" title=\"这是一个标题，可以为一行或者两行。\">\n            <view slot=\"{{'actionSlot' + '1'}}\" class=\"custom-action\">\n                <view class=\"custom-action_desc\">前往图中包含的小程序：</view>\n                <view class=\"custom-action_content\">\n                    <mp-icon icon=\"qr-code\" size=\"{{20}}\"></mp-icon>\n                    <text class=\"custom-action_name\">小程序名称</text>\n                    <mp-icon icon=\"arrow\" size=\"{{12}}\"></mp-icon>\n                </view>\n            </view>\n        </mp-actionSheet>\n    </scroll-view>\n</view>\n"
  },
  {
    "path": "src/example/actionsheet/actionsheet.wxss",
    "content": ".custom-action {\n  padding: 16px 0;\n  text-align: center;\n\n}\n.custom-action .custom-action_desc {\n    color: #999999\n}\n\n.custom-action .custom-action_name {\n  margin: 10px 5px;\n  line-height: 1;\n  vertical-align: middle;\n}"
  },
  {
    "path": "src/example/article/article.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({});"
  },
  {
    "path": "src/example/article/article.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\"\n  }\n}"
  },
  {
    "path": "src/example/article/article.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Article\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Article</view>\n            <view class=\"page__desc\">文章</view>\n        </view>\n        <view class=\"page__bd\">\n            <view class=\"weui-article\">\n                <view class=\"weui-article__h1\">大标题</view>\n                <view class=\"weui-article__section\">\n                    <view class=\"weui-article__h2\">章标题</view>\n                    <view class=\"weui-article__section\">\n                        <view class=\"weui-article__h3\">1.1 节标题</view>\n                        <view class=\"weui-article__p\">\n                            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n                            tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n                            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n                            consequat.\n                        </view>\n                        <view class=\"weui-article__p\">\n                            <image class=\"weui-article__img\" src=\"../images/pic_article.png\" mode=\"aspectFit\" style=\"height: 180px\" />\n                            <image class=\"weui-article__img\" src=\"../images/pic_article.png\" mode=\"aspectFit\" style=\"height: 180px\" />\n                        </view>\n                    </view>\n                    <view class=\"weui-article__section\">\n                        <view class=\"weui-article__h3\">1.2 节标题</view>\n                        <view class=\"weui-article__p\">\n                            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n                            tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n                            cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non\n                            proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n                        </view>\n                    </view>\n                </view>\n            </view>\n        </view>\n    </scroll-view>\n</view>\n"
  },
  {
    "path": "src/example/article/article.wxss",
    "content": "page{\n    background-color: #FFFFFF;\n}\nimage{\n    margin: 4px 0;\n}"
  },
  {
    "path": "src/example/badge/badge.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({})"
  },
  {
    "path": "src/example/badge/badge.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-cells\": \"../../components/cells/cells\",\n    \"mp-cell\": \"../../components/cell/cell\",\n    \"mp-badge\": \"../../components/badge/badge\"\n  }\n}"
  },
  {
    "path": "src/example/badge/badge.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Badge\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Badge</view>\n            <view class=\"page__desc\">徽章</view>\n        </view>\n\n        <view class=\"page__bd\">\n            <mp-cells title=\"新消息提示跟摘要信息后，统一在列表右侧\">\n                <mp-cell title=\"单行列表\" link>\n                    <view slot=\"footer\" style=\"display: flex; flex-direction: row; align-items: center;\">\n                        <view style=\"display: inline-block;vertical-align:middle; font-size: 17px;\">详细信息</view>\n                        <mp-badge style=\"margin-left: 5px;margin-right: 5px;\" ext-class=\"blue\"/>\n                    </view>\n                </mp-cell>\n            </mp-cells>\n\n            <mp-cells title=\"未读数红点跟在主题信息后，统一在列表左侧\">\n                <mp-cell>\n                    <view slot=\"title\" style=\"position: relative;margin-right: 10px;\">\n                        <image src=\"../images/pic_160.png\" style=\"width: 50px; height: 50px; display: block\"/>\n                        <mp-badge aria-label=\"未读\" content=\"99+\" style=\"position: absolute;top: -0.4rem;right: -0.4rem;\"/>\n                    </view>\n                    <view>联系人名称</view>\n                    <view style=\"font-size: 13px;color: #888888;\">摘要信息</view>\n                </mp-cell>\n                <mp-cell link>\n                    <view style=\"display: flex; flex-direction: row; align-items: center;\">\n                        <view style=\"display: inline-block; vertical-align: middle\">单行列表</view>\n                        <mp-badge content=\"8\" style=\"margin-left: 5px;\"/>\n                    </view>\n                </mp-cell>\n                <mp-cell link>\n                    <view style=\"display: flex; flex-direction: row; align-items: center;\">\n                        <view style=\"display: inline-block; vertical-align: middle\">单行列表</view>\n                        <mp-badge style=\"margin-left: 5px;\" content=\"New\"/>\n                    </view>\n                </mp-cell>\n            </mp-cells>\n        </view>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/badge/badge.wxss",
    "content": "/* example/badge/badge.wxss */\n.blue {\n  background: blue;\n}"
  },
  {
    "path": "src/example/button/button.js",
    "content": "Page({});"
  },
  {
    "path": "src/example/button/button.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/example/button/button.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Button</view>\n        <view class=\"page__desc\">按钮，WeUI采用小程序原生的按钮为主体，加入一些间距的样式。</view>\n    </view>\n    <view class=\"page__bd page__bd_spacing\">\n        <button class=\"weui-btn\" type=\"primary\">页面主操作</button>\n        <button class=\"weui-btn\" type=\"primary\" disabled=\"true\">页面主操作</button>\n        <button class=\"weui-btn\" type=\"primary\" loading>页面主操作</button>\n\n        <button class=\"weui-btn\" type=\"default\">页面次要操作</button>\n        <button class=\"weui-btn\" type=\"default\" disabled=\"true\">页面次要操作</button>\n        <button class=\"weui-btn\" type=\"default\" loading>页面次要操作</button>\n\n        <button class=\"weui-btn\" type=\"warn\">警告类操作</button>\n        <button class=\"weui-btn\" type=\"warn\" disabled=\"true\">警告类操作</button>\n        <button class=\"weui-btn\" type=\"warn\" loading>警告类操作</button>\n\n        <view class=\"button-sp-area\">\n            <button class=\"weui-btn\" type=\"primary\" plain=\"true\">按钮</button>\n            <button class=\"weui-btn\" type=\"primary\" disabled=\"true\" plain=\"true\">按钮</button>\n            <button class=\"weui-btn\" type=\"primary\" loading plain=\"true\">按钮</button>\n\n            <button class=\"weui-btn\" type=\"default\" plain=\"true\">按钮</button>\n            <button class=\"weui-btn\" type=\"default\" disabled=\"true\" plain=\"true\">按钮</button>\n            <button class=\"weui-btn\" type=\"default\" loading plain=\"true\">按钮</button>\n\n            <button class=\"weui-btn mini-btn\" type=\"primary\" size=\"mini\">按钮</button>\n            <button class=\"weui-btn mini-btn\" type=\"default\" size=\"mini\">按钮</button>\n            <button class=\"weui-btn mini-btn\" type=\"warn\" size=\"mini\">按钮</button>\n        </view>\n    </view>\n</view>\n"
  },
  {
    "path": "src/example/button/button.wxss",
    "content": "page{background-color:#EDEDED;}\n.button-sp-area{\n    margin: 0 auto;\n    padding-top: 15px;\n    text-align:center;\n}\n.mini-btn{\n    margin: 0 4px;\n}\n"
  },
  {
    "path": "src/example/cell/cell.js",
    "content": "import base64 from '../images/base64'\nimport CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    onLoad: function () {\n        this.setData({\n            icon: base64.icon20,\n            slideButtons: [\n                {\n                    text: '普通',\n                    src: require('./icon_love.svg').default // icon的路径\n                },\n                {\n                    text: '普通',\n                    extClass: 'test',\n                    src: require('./icon_star.svg').default // icon的路径\n                },\n                {\n                    type: 'warn',\n                    text: '警示',\n                    extClass: 'test',\n                    src: require('./icon_del.svg').default // icon的路径\n                }\n            ]\n        })\n    },\n    slideButtonTap(e) {\n        console.log('slide button tap', e.detail)\n    }\n})\n"
  },
  {
    "path": "src/example/cell/cell.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-cells\": \"../../components/cells/cells\",\n    \"mp-cell\": \"../../components/cell/cell\",\n    \"mp-slideview\": \"../../components/slideview/slideview\"\n  }\n}"
  },
  {
    "path": "src/example/cell/cell.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Cell\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Cell</view>\n            <view class=\"page__desc\">列表</view>\n        </view>\n        <view class=\"page__bd\">\n            <mp-cells ext-class=\"my-cells\" title=\"带说明的列表项\">\n                <mp-cell value=\"标题文字\" footer=\"说明文字\"></mp-cell>\n                <mp-cell>\n                    <view>标题文字（使用slot）</view>\n                    <view slot=\"footer\">说明文字</view>\n                </mp-cell>\n                <mp-slideview show=\"{{true}}\" buttons=\"{{slideButtons}}\" bindbuttontap=\"slideButtonTap\">\n                    <mp-cell value=\"左滑可以删除\" footer=\"说明文字\"></mp-cell>\n                </mp-slideview>\n            </mp-cells>\n\n            <mp-cells title=\"带图标、说明的列表项\" footer=\"底部说明文字\">\n                <mp-cell value=\"标题文字\" footer=\"说明文字\">\n                    <image slot=\"icon\" src=\"{{icon}}\" style=\"margin-right: 16px;vertical-align: middle;width:20px; height: 20px;\"></image>\n                </mp-cell>\n                <mp-cell value=\"标题文字\" footer=\"说明文字\">\n                    <image slot=\"icon\" src=\"{{icon}}\" style=\"margin-right: 16px;vertical-align: middle;width:20px; height: 20px;\"></image>\n                </mp-cell>\n            </mp-cells>\n\n            <mp-cells title=\"带跳转的列表项\">\n                <mp-cell hover value=\"有hover效果，无跳转URL\" footer=\"说明文字\">\n                    <image slot=\"title\" src=\"{{icon}}\" style=\"margin-right: 16px;vertical-align: middle;width:20px; height: 20px;\"></image>\n                </mp-cell>\n                <mp-cell link url=\"./cell\" value=\"有跳转URL\" footer=\"说明文字\">\n                    <image slot=\"icon\" src=\"{{icon}}\" style=\"margin-right: 16px;vertical-align: middle;width:20px; height: 20px;\"></image>\n                </mp-cell>\n            </mp-cells>\n\n        </view>\n    </scroll-view>\n</view>\n"
  },
  {
    "path": "src/example/cell/cell.wxss",
    "content": ""
  },
  {
    "path": "src/example/common.less",
    "content": "@import (css) '~weui-wxss/dist/app.wxss';\n@import '../components/patch.less';\n\n@media (prefers-color-scheme: dark) {\n    page {\n        background-color: #1f1f1f;\n    }\n}\n\n"
  },
  {
    "path": "src/example/dialog/dialog.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    data: {\n        dialogShow: false,\n        showOneButtonDialog: false,\n        buttons: [{ text: '取消' }, { text: '确定' }],\n        oneButton: [{ text: '确定' }]\n    },\n    openConfirm: function () {\n        this.setData({\n            dialogShow: true\n        })\n    },\n    tapDialogButton(e) {\n        this.setData({\n            dialogShow: false,\n            showOneButtonDialog: false\n        })\n    },\n    tapOneDialogButton(e) {\n        this.setData({\n            showOneButtonDialog: true\n        })\n    }\n})\n"
  },
  {
    "path": "src/example/dialog/dialog.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-dialog\": \"../../components/dialog/dialog\"\n  }\n}"
  },
  {
    "path": "src/example/dialog/dialog.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Dialog\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Dialog</view>\n            <view class=\"page__desc\">对话框</view>\n        </view>\n        <view class=\"page__bd\">\n            <view class=\"weui-btn-area\">\n                <button class=\"weui-btn\" type=\"default\" bindtap=\"openConfirm\">确认取消按钮</button>\n                <button class=\"weui-btn mrt16\" type=\"default\" bindtap=\"tapOneDialogButton\">只有确认按钮</button>\n            </view>\n        </view>\n        <mp-dialog title=\"test\" show=\"{{dialogShow}}\" bindbuttontap=\"tapDialogButton\" buttons=\"{{buttons}}\">\n            <view>test content</view>\n        </mp-dialog>\n        <mp-dialog title=\"test1\" show=\"{{showOneButtonDialog}}\" bindbuttontap=\"tapDialogButton\" buttons=\"{{oneButton}}\">\n            <view>test content1</view>\n        </mp-dialog>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/dialog/dialog.wxss",
    "content": ""
  },
  {
    "path": "src/example/flex/flex.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({})"
  },
  {
    "path": "src/example/flex/flex.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\"\n  }\n}"
  },
  {
    "path": "src/example/flex/flex.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Flex\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Flex</view>\n            <view class=\"page__desc\">Flex布局</view>\n        </view>\n        <view class=\"page__bd page__bd_spacing\">\n            <view class=\"weui-flex\">\n                <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n            </view>\n            <view class=\"weui-flex\">\n                <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n                <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n            </view>\n            <view class=\"weui-flex\">\n                <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n                <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n                <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n            </view>\n            <view class=\"weui-flex\">\n                <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n                <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n                <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n                <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n            </view>\n            <view class=\"weui-flex\">\n                <view><view class=\"placeholder\">weui</view></view>\n                <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n                <view><view class=\"placeholder\">weui</view></view>\n            </view>\n        </view>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/flex/flex.wxss",
    "content": ".placeholder {\n    margin: 5px;\n    padding: 0 10px;\n    text-align: center;\n    background-color: var(--weui-BG-1);\n    height: 2.3rem;\n    line-height: 2.3rem;\n    color: var(--weui-FG-1);\n}\n"
  },
  {
    "path": "src/example/footer/footer.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({})"
  },
  {
    "path": "src/example/footer/footer.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\"\n  }\n}"
  },
  {
    "path": "src/example/footer/footer.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Footer\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Footer</view>\n            <view class=\"page__desc\">页脚</view>\n        </view>\n        <view class=\"page__bd page__bd_spacing\">\n            <view class=\"weui-footer\">\n                <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n            </view>\n\n\n            <view class=\"weui-footer\">\n                <view class=\"weui-footer__links\">\n                    <navigator url=\"\" class=\"weui-footer__link\">底部链接</navigator>\n                </view>\n                <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n            </view>\n\n\n            <view class=\"weui-footer\">\n                <view class=\"weui-footer__links\">\n                    <navigator url=\"\" class=\"weui-footer__link\">底部链接</navigator>\n                    <navigator url=\"\" class=\"weui-footer__link\">底部链接</navigator>\n                </view>\n                <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n            </view>\n\n            <view class=\"weui-footer weui-footer_fixed-bottom\">\n                <view class=\"weui-footer__links\">\n                    <navigator url=\"\" class=\"weui-footer__link\">WeUI首页</navigator>\n                </view>\n                <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n            </view>\n        </view>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/footer/footer.wxss",
    "content": "/* 作为展示用的样式 */\n\n.weui-footer{\n    margin-bottom: 50px;\n}\n.weui-footer_fixed-bottom{\n    margin-bottom: 0;\n}\n\n.weui-footer__links {\n    display: flex; /* skyline 不支持 inline */\n    flex-direction: row;\n    justify-content: center;\n}"
  },
  {
    "path": "src/example/form/form.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    data: {\n        showTopTips: false,\n\n        radioItems: [\n            {name: 'cell standard', value: '0', checked: true},\n            {name: 'cell standard', value: '1'}\n        ],\n        checkboxItems: [\n            {name: 'standard is dealt for u.', value: '0', checked: true},\n            {name: 'standard is dealicient for u.', value: '1'}\n        ],\n        items: [\n            {name: 'USA', value: '美国'},\n            {name: 'CHN', value: '中国', checked: 'true'},\n            {name: 'BRA', value: '巴西'},\n            {name: 'JPN', value: '日本'},\n            {name: 'ENG', value: '英国'},\n            {name: 'TUR', value: '法国'},\n        ],\n\n        date: \"2016-09-01\",\n        time: \"12:01\",\n\n        countryCodes: [\"+86\", \"+80\", \"+84\", \"+87\"],\n        countryCodeIndex: 0,\n\n        countries: [\"中国\", \"美国\", \"英国\"],\n        countryIndex: 0,\n\n        accounts: [\"微信号\", \"QQ\", \"Email\"],\n        accountIndex: 0,\n\n        isAgree: false,\n        formData: {\n\n        },\n        rules: [{\n            name: 'radio',\n            rules: {required: false, message: '单选列表是必选项'},\n        }, {\n            name: 'checkbox',\n            rules: {required: true, message: '多选列表是必选项'},\n        }, {\n            name: 'name',\n            rules: {required: true, message: '请输入姓名'},\n        }, {\n            name: 'qq',\n            rules: {required: true, message: 'qq必填'},\n        }, {\n            name: 'mobile',\n            rules: [{required: true, message: 'mobile必填'}, {mobile: true, message: 'mobile格式不对'}],\n        }, {\n            name: 'vcode',\n            rules: {required: true, message: '验证码必填'},\n        }, {\n            name: 'idcard',\n            rules: {validator: function(rule, value, param, modeels) {\n                if (!value || value.length !== 18) {\n                    return 'idcard格式不正确'\n                }\n            }},\n        }]\n    },\n    radioChange: function (e) {\n        console.log('radio发生change事件，携带value值为：', e.detail.value);\n\n        var radioItems = this.data.radioItems;\n        for (var i = 0, len = radioItems.length; i < len; ++i) {\n            radioItems[i].checked = radioItems[i].value == e.detail.value;\n        }\n\n        this.setData({\n            radioItems: radioItems,\n            [`formData.radio`]: e.detail.value\n        });\n    },\n    checkboxChange: function (e) {\n        console.log('checkbox发生change事件，携带value值为：', e.detail.value);\n\n        var checkboxItems = this.data.checkboxItems, values = e.detail.value;\n        for (var i = 0, lenI = checkboxItems.length; i < lenI; ++i) {\n            checkboxItems[i].checked = false;\n\n            for (var j = 0, lenJ = values.length; j < lenJ; ++j) {\n                if(checkboxItems[i].value == values[j]){\n                    checkboxItems[i].checked = true;\n                    break;\n                }\n            }\n        }\n\n        this.setData({\n            checkboxItems: checkboxItems,\n            [`formData.checkbox`]: e.detail.value\n        });\n    },\n    bindDateChange: function (e) {\n        this.setData({\n            date: e.detail.value,\n            [`formData.date`]: e.detail.value\n        })\n    },\n    formInputChange(e) {\n        const {field} = e.currentTarget.dataset\n        this.setData({\n            [`formData.${field}`]: e.detail.value\n        })\n    },\n    bindTimeChange: function (e) {\n        this.setData({\n            time: e.detail.value\n        })\n    },\n    bindCountryCodeChange: function(e){\n        console.log('picker country code 发生选择改变，携带值为', e.detail.value);\n\n        this.setData({\n            countryCodeIndex: e.detail.value\n        })\n    },\n    bindCountryChange: function(e) {\n        console.log('picker country 发生选择改变，携带值为', e.detail.value);\n\n        this.setData({\n            countryIndex: e.detail.value\n        })\n    },\n    bindAccountChange: function(e) {\n        console.log('picker account 发生选择改变，携带值为', e.detail.value);\n\n        this.setData({\n            accountIndex: e.detail.value\n        })\n    },\n    bindAgreeChange: function (e) {\n        this.setData({\n            isAgree: !!e.detail.value.length\n        });\n    },\n    submitForm() {\n        this.selectComponent('#form').validate((valid, errors) => {\n            console.log('valid', valid, errors)\n            if (!valid) {\n                const firstError = Object.keys(errors)\n                if (firstError.length) {\n                    this.setData({\n                        error: errors[firstError[0]].message\n                    })\n\n                }\n            } else {\n                wx.showToast({\n                    title: '校验通过'\n                })\n            }\n        })\n        // this.selectComponent('#form').validateField('mobile', (valid, errors) => {\n        //     console.log('valid', valid, errors)\n        // })\n    }\n});"
  },
  {
    "path": "src/example/form/form.json",
    "content": "{\n  \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-form-page\": \"../../components/form-page/form-page\",\n    \"mp-toptips\": \"../../components/toptips/toptips\",\n    \"mp-cells\": \"../../components/cells/cells\",\n    \"mp-cell\": \"../../components/cell/cell\",\n    \"mp-checkbox\": \"../../components/checkbox/checkbox\",\n    \"mp-checkbox-group\": \"../../components/checkbox-group/checkbox-group\",\n    \"mp-form\": \"../../components/form/form\"\n  }\n}"
  },
  {
    "path": "src/example/form/form.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"form\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <mp-toptips msg=\"{{error}}\" type=\"error\" show=\"{{error}}\"></mp-toptips>\n\n        <mp-form-page title=\"表单结构\" subtitle=\"展示表单页面的信息结构样式, 分别由头部区域/控件区域/提示区域/操作区域和底部信息区域组成。\">\n            <mp-form id=\"form\" rules=\"{{rules}}\" models=\"{{formData}}\">\n                <mp-cells title=\"单选列表项\">\n                    <mp-checkbox-group prop=\"radio\" multi=\"{{false}}\" bindchange=\"radioChange\">\n                        <mp-checkbox wx:for=\"{{radioItems}}\" wx:key=\"value\" label=\"{{item.name}}\" value=\"{{item.value}}\" checked=\"{{item.checked}}\"></mp-checkbox>\n                    </mp-checkbox-group>\n                </mp-cells>\n                <mp-cells title=\"复选列表项\">\n                    <mp-checkbox-group prop=\"checkbox\" multi=\"{{true}}\" bindchange=\"checkboxChange\">\n                        <mp-checkbox wx:for=\"{{checkboxItems}}\" wx:key=\"value\" label=\"{{item.name}}\" value=\"{{item.value}}\" checked=\"{{item.checked}}\"></mp-checkbox>\n                    </mp-checkbox-group>\n                </mp-cells>\n\n                <mp-cells title=\"表单\" footer=\"底部说明文字底部说明文字\">\n                    <label>\n                        <mp-cell prop=\"name\" title=\"姓名\" ext-class=\"\">\n                            <input bindinput=\"formInputChange\" data-field=\"name\" class=\"weui-input\" placeholder=\"请输入姓名\"/>\n                        </mp-cell>\n                    </label>\n                    <label>\n                        <mp-cell prop=\"qq\" title=\"qq\" ext-class=\"\">\n                            <input bindinput=\"formInputChange\" data-field=\"qq\" class=\"weui-input\" placeholder=\"请输入qq\"/>\n                        </mp-cell>\n                    </label>\n                    <label>\n                        <mp-cell prop=\"mobile\" title=\"手机号\" ext-class=\" weui-cell_vcode\">\n                            <input bindinput=\"formInputChange\" data-field=\"mobile\" class=\"weui-input\" placeholder=\"请输入手机号\"/>\n                            <button slot=\"footer\" type=\"default\" class=\"weui-vcode-btn\">获取验证码</button>\n                        </mp-cell>\n                    </label>\n                    <label>\n                        <mp-cell prop=\"date\" title=\"日期\" ext-class=\"\">\n                            <picker data-field=\"date\" mode=\"date\" value=\"{{date}}\" start=\"2015-09-01\" end=\"2017-09-01\" bindchange=\"bindDateChange\">\n                                <view class=\"weui-input\">{{date}}</view>\n                            </picker>\n                        </mp-cell>\n                    </label>\n                    <mp-cell prop=\"vcode\" title=\"验证码\" ext-class=\" weui-cell_vcode\">\n                        <input bindinput=\"formInputChange\" data-field=\"vcode\" class=\"weui-input\" placeholder=\"请输入验证码\"/>\n                        <image slot=\"footer\" class=\"weui-vcode-img\" src=\"../images/vcode.jpg\" style=\"width: 108px\"></image>\n                    </mp-cell>\n                </mp-cells>\n                <mp-cells title=\"提交后表单项报错\">\n                    <mp-cell show-error prop=\"idcard\" title=\"卡号\" ext-class=\"\">\n                        <input bindinput=\"formInputChange\" data-field=\"idcard\" class=\"weui-input\" placeholder=\"请输入卡号\"/>\n                    </mp-cell>\n                </mp-cells>\n                <mp-cells title=\"开关\">\n                    <mp-cell title=\"标题文字\" ext-class=\"\">\n                        <switch slot=\"footer\" checked />\n                    </mp-cell>\n                </mp-cells>\n                <mp-cells title=\"文本框\">\n                    <mp-cell title=\"标题文字\" ext-class=\"\">\n                        <input class=\"weui-input\" placeholder=\"请输入文本\" />\n                    </mp-cell>\n                </mp-cells>\n                <mp-cells title=\"文本域\">\n                    <mp-cell has-header=\"{{false}}\" has-footer=\"{{false}}\" title=\"\" ext-class=\"\">\n                        <textarea placeholder=\"请输入文本\" style=\"height: 80px\"/>\n                        <view class=\"weui-textarea-counter\">0/200</view>\n                    </mp-cell>\n                </mp-cells>\n                <mp-cells title=\"选择\">\n                    <mp-cell ext-class=\"weui-cell_select weui-cell_select-before\">\n                        <view slot=\"title\" style=\"width: 105px\">\n                            <picker aria-role=\"listbox\"  bindchange=\"bindCountryCodeChange\" value=\"{{countryCodeIndex}}\" range=\"{{countryCodes}}\">\n                            <view class=\"weui-select\">{{countryCodes[countryCodeIndex]}}</view>\n                            </picker>\n                        </view>\n                        <input class=\"weui-input\" placeholder=\"请输入号码\" />\n                    </mp-cell>\n                </mp-cells>\n                <mp-cells title=\"选择\">\n                    <label>\n                        <mp-cell has-header=\"{{false}}\" ext-class=\"weui-cell_select\">\n                            <picker bindchange=\"bindAccountChange\" value=\"{{accountIndex}}\" range=\"{{accounts}}\">\n                                <view class=\"weui-select\">{{accounts[accountIndex]}}</view>\n                            </picker>\n                        </mp-cell>\n                    </label>\n                    <label>\n                        <mp-cell ext-class=\"weui-cell_select weui-cell_select-after\">\n                            <view slot=\"title\" class=\"weui-label\">国家/地区</view>\n                            <picker bindchange=\"bindCountryChange\" value=\"{{countryIndex}}\" range=\"{{countries}}\">\n                                <view class=\"weui-select\">{{countries[countryIndex]}}</view>\n                            </picker>\n                        </mp-cell>\n                    </label>\n                </mp-cells>\n            </mp-form>\n\n            <checkbox-group slot=\"tips\" bindchange=\"bindAgreeChange\">\n                <label class=\"weui-agree\">\n                    <checkbox class=\"weui-agree__checkbox-check\" />\n                    <text class=\"weui-agree__checkbox\" />\n                    <view class=\"weui-agree__text\"><text>阅读并同意</text><navigator>《相关条款》</navigator></view>\n                </label>\n            </checkbox-group>\n\n            <view slot=\"button\">\n                <button class=\"weui-btn\" type=\"primary\" bindtap=\"submitForm\">确定</button>\n            </view>\n        </mp-form-page>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/form/form.wxss",
    "content": "/* example/input/input.wxss */\n\n.weui-agree {\n  display: flex; /* skyline 不支持 inline */\n  flex-direction: row;\n  justify-content: center;\n}\n\n.weui-agree .weui-agree__text {\n  display: flex; /* skyline 不支持 inline */\n  flex-direction: row;\n}\n\n/* skyline 不支持 currentColor */\n.weui-cell_select .weui-cell__bd::after {\n  background-color: var(--weui-FG-2);\n}"
  },
  {
    "path": "src/example/form-page/form-page.js",
    "content": "Component({\n    data: {},\n    methods: {}\n});"
  },
  {
    "path": "src/example/form-page/form-page.json",
    "content": "{\n  \"component\": true,\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-form-page\": \"../../components/form-page/form-page\"\n  }\n}"
  },
  {
    "path": "src/example/form-page/form-page.wxml",
    "content": "<view class=\"weui-form\">\n  <view class=\"weui-form__text-area\">\n    <view class=\"weui-form__title\">表单标题</view>\n    <view class=\"weui-form__desc\">表单描述示意</view>\n  </view>\n  <view class=\"weui-form__control-area\">\n    <view class=\"weui-cells__group weui-cells__group_form\">\n        <view class=\"weui-cells__title\">输入框</view>\n        <view class=\"weui-cells weui-cells_form\">\n          <view class=\"weui-cell\">\n            <view class=\"weui-cell__hd\"><label class=\"weui-label\">QQ号</label></view>\n            <view class=\"weui-cell__bd\">\n                <input class=\"weui-input\" type=\"number\" pattern=\"[0-9]*\" placeholder=\"请输入QQ号\"/>\n            </view>\n          </view>\n        </view>\n    </view>\n  </view>\n  <view class=\"weui-form__tips-area\">\n    <label for=\"weuiAgree\" class=\"weui-agree\">\n      <input id=\"weuiAgree\" type=\"checkbox\" class=\"weui-agree__checkbox\"/><span class=\"weui-agree__text\">阅读并同意<a href=\"javascript:void(0);\">《相关条款》</a>\n      </span>\n    </label>\n  </view>\n  <view class=\"weui-form__opr-area\">\n    <button type=\"primary\">确定</button>\n  </view>\n  <view class=\"weui-form__tips-area\">\n    <view class=\"weui-form__tips\">\n      点击下一步即表示<navigator href=\"javascript:;\">同意用户协议</navigator>\n    </view>\n  </view>\n  <view class=\"weui-form__extra-area\">\n    <view class=\"weui-footer\">\n      <view class=\"weui-footer__links\">\n        <navigator href=\"javascript:void(0);\" class=\"weui-footer__link\">底部链接文本</navigator>\n      </view>\n      <view class=\"weui-footer__text\">Copyright © 2008-2019 weui.io</view>\n    </view>\n  </view>\n</view>\n"
  },
  {
    "path": "src/example/form-page/form-page.wxss",
    "content": "\npage{height:100%;}\n"
  },
  {
    "path": "src/example/gallery/gallery.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    data: {\n        imgUrls: [\n            'https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png',\n            'https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png',\n            'https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png',\n        ],\n        show: true\n    },\n    openGallery() {\n        this.setData({ show: true })\n    },\n    change(e) {\n        console.log('current index has changed', e.detail)\n    },\n    delete(e) {\n        console.log('delete', e.detail)\n    },\n    hide() {\n        console.log('component hide')\n    }\n});"
  },
  {
    "path": "src/example/gallery/gallery.json",
    "content": "{\n  \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-gallery\": \"../../components/gallery/gallery\"\n  }\n}"
  },
  {
    "path": "src/example/gallery/gallery.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Gallery\"></mp-navigation-bar>\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Gallery</view>\n        <view class=\"page__desc\">画廊，类似原生的wx.previewImage的展示。</view>\n    </view>\n    <button class=\"weui-btn weui-btn_default\" bindtap=\"openGallery\">open</button>\n    <mp-gallery show=\"{{show}}\" bindchange=\"change\" binddelete=\"delete\" bindhide=\"hide\" img-urls=\"{{imgUrls}}\" delete hide-on-click=\"{{true}}\" current=\"1\"></mp-gallery>\n</view>"
  },
  {
    "path": "src/example/gallery/gallery.wxss",
    "content": "/* example/gallery/gallery.wxss */\n\n"
  },
  {
    "path": "src/example/grid/grid.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nconst { GRID_DEMO_URL } = getApp().globalData\nconst app = getApp()\n\nCustomPage({\n    data: {\n        grids: [\n            {\n                imgUrl: app.globalData.iconTabbar,\n                url: GRID_DEMO_URL,\n                text: 'Grid'\n            },\n            {\n                imgUrl: app.globalData.iconTabbar,\n                url: GRID_DEMO_URL,\n                text: 'Grid'\n            },\n            {\n                imgUrl: app.globalData.iconTabbar,\n                url: GRID_DEMO_URL,\n                text: 'Grid'\n            },\n            {\n                imgUrl: app.globalData.iconTabbar,\n                url: GRID_DEMO_URL,\n                text: 'Grid'\n            },\n            {\n                imgUrl: app.globalData.iconTabbar,\n                url: GRID_DEMO_URL,\n                text: 'Grid'\n            },\n            {\n                imgUrl: app.globalData.iconTabbar,\n                url: GRID_DEMO_URL,\n                text: 'Grid'\n            },\n            {\n                imgUrl: app.globalData.iconTabbar,\n                url: GRID_DEMO_URL,\n                text: 'Grid'\n            },\n            {\n                imgUrl: app.globalData.iconTabbar,\n                url: GRID_DEMO_URL,\n                text: 'Grid'\n            },\n            {\n                imgUrl: app.globalData.iconTabbar,\n                url: GRID_DEMO_URL,\n                text: 'Grid'\n            }\n        ]\n    }\n})\n"
  },
  {
    "path": "src/example/grid/grid.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-grids\": \"../../components/grids/grids\"\n  }\n}"
  },
  {
    "path": "src/example/grid/grid.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Grid\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Grid</view>\n            <view class=\"page__desc\">九宫格</view>\n        </view>\n        <view class=\"page__bd\">\n            <mp-grids grids=\"{{grids}}\"></mp-grids>\n        </view>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/grid/grid.wxss",
    "content": "/* example/grid/grid.wxss */\n\n"
  },
  {
    "path": "src/example/half-screen-dialog/half-screen-dialog.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    data: {\n        typeF: false,\n        typeS: false,\n        typeT: false,\n        buttons: [\n            {\n                type: 'default',\n                className: '',\n                text: '辅助操作',\n                value: 0\n            },\n            {\n                type: 'primary',\n                className: '',\n                text: '主操作',\n                value: 1\n            }\n        ]\n    },\n    openTypeF: function () {\n        this.setData({\n            typeF: true\n        })\n    },\n    openTypeS: function () {\n        this.setData({\n            typeS: true\n        })\n    },\n    openTypeT: function() {\n        this.setData({\n            typeT: true\n        })\n    },\n    buttontap(e) {\n        console.log(e.detail)\n    }\n});\n"
  },
  {
    "path": "src/example/half-screen-dialog/half-screen-dialog.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-halfScreenDialog\": \"../../components/half-screen-dialog/half-screen-dialog\"\n  }\n}"
  },
  {
    "path": "src/example/half-screen-dialog/half-screen-dialog.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n  <mp-navigation-bar title=\"Half Screen Dialog\"></mp-navigation-bar>\n  <scroll-view type=\"list\" scroll-y class=\"page-height\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Half Screen Dialog</view>\n        <view class=\"page__desc\">半屏弹窗，辅助完成当前页面任务时；提醒用户并引导用户的下一步操作；用户主动发起的任务时。</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-btn-area\">\n            <button class=\"weui-btn\" type=\"primary\" bindtap=\"openTypeF\">样式一</button>\n            <button class=\"weui-btn mrt16\" type=\"primary\" bindtap=\"openTypeS\">样式二</button>\n            <button class=\"weui-btn mrt16\" type=\"primary\" bindtap=\"openTypeT\">样式三</button>\n        </view>\n        <mp-halfScreenDialog show=\"{{typeF}}\">\n          <view slot=\"title\">测试标题A</view>\n          <view slot=\"desc\">这是自定义描述区</view>\n          <view slot=\"footer\">\n            <button type=\"default\" class=\"weui-btn\">按钮A</button>\n            <button type=\"primary\" class=\"weui-btn\">按钮B</button>\n          </view>\n        </mp-halfScreenDialog>\n        <mp-halfScreenDialog show=\"{{typeT}}\" closabled=\"{{false}}\">\n          <view slot=\"title\">测试标题A</view>\n          <view slot=\"desc\">这是自定义描述区</view>\n          <view slot=\"footer\">\n            <button type=\"default\" class=\"weui-btn\">按钮A</button>\n            <button type=\"primary\" class=\"weui-btn\">按钮B</button>\n          </view>\n        </mp-halfScreenDialog>\n        <mp-halfScreenDialog\n          bindbuttontap=\"buttontap\"\n          show=\"{{typeS}}\"\n          maskClosable=\"{{false}}\"\n          title=\"测试标题B\"\n          subTitle=\"测试标题B的副标题\"\n          desc=\"辅助描述内容，可根据实际需要安排\"\n          tips=\"辅助提示内容，可根据实际需要安排\"\n          buttons=\"{{buttons}}\"\n        ></mp-halfScreenDialog>\n    </view>\n  </scroll-view>\n</view>\n"
  },
  {
    "path": "src/example/half-screen-dialog/half-screen-dialog.wxss",
    "content": "\n/* .weui-demo-dialog{\n  visibility:hidden;\n  opacity:0;\n  transition:all .3s;\n}\n.weui-half-screen-dialog{\n  transition:all .3s;\n  transform:translateY(100%);\n}\n.weui-demo-dialog_show{\n  visibility:visible;\n  opacity:1;\n}\n.weui-demo-dialog_show .weui-half-screen-dialog{\n    transform:translateY(0);\n}\n\n.fontSize {\n  font-size: 25rpx;\n} */\n"
  },
  {
    "path": "src/example/icons/icons.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nconst colorLight = 'rgba(0, 0, 0, .9)'\nconst colorDark = 'rgba(255, 255, 255, .8)'\n\nCustomPage({\n    data: {\n        iconList: [\n            {\n                icon: 'add-friends',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'add',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'add2',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'album',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'arrow',\n                color: colorLight,\n                size: 12,\n                name: ''\n            },\n            {\n                icon: 'at',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'back',\n                color: colorLight,\n                size: 12,\n                name: ''\n            },\n            {\n                icon: 'back2',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'bellring-off',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'bellring-on',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'camera',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'cellphone',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'clip',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'close',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'close2',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'comment',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'contacts',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'copy',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'delete-on',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'delete',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'discover',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'display',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'done',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'done2',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'download',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'email',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'error',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'eyes-off',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'eyes-on',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'folder',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'group-detail',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'help',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'home',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'imac',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'info',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'keyboard',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'like',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'link',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'location',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'lock',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'max-window',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'me',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'mike',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'mike2',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'mobile-contacts',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'more',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'more2',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'mosaic',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'music-off',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'music',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'note',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'pad',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'pause',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'pencil',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'photo-wall',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'play',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'play2',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'previous',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'previous2',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'qr-code',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'refresh',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'report-problem',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'search',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'sending',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'setting',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'share',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'shop',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'star',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'sticker',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'tag',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'text',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'time',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'transfer-text',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'transfer2',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'translate',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'tv',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'video-call',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'voice',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'volume-down',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'volume-off',\n                color: colorLight,\n                size: 25,\n                name: ''\n            },\n            {\n                icon: 'volume-up',\n                color: colorLight,\n                size: 25,\n                name: ''\n            }\n        ]\n    },\n    onLoad() {\n        this.setIconColor(this.data.theme)\n\n        const app = getApp()\n        app.watchThemeChange && app.watchThemeChange(this.setIconColor)\n    },\n    setIconColor(theme) {\n        const color = theme === 'dark' ? colorDark : colorLight\n\n        this.setData({\n            iconList: this.data.iconList.map((icon) => {\n                icon.color = color\n                return icon\n            })\n        })\n    }\n})\n"
  },
  {
    "path": "src/example/icons/icons.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-icon\": \"../../components/icon/icon\"\n  }\n}"
  },
  {
    "path": "src/example/icons/icons.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Icons\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Icons</view>\n            <view class=\"page__desc\">图标</view>\n        </view>\n        <view class=\"page__bd\">\n            <view class=\"icon-box\">\n                <view class=\"icon-box__title\">描边型</view>\n                <view class=\"weui-grids\">\n                    <block wx:for=\"{{iconList}}\" wx:key=\"*this\">\n                        <view class=\"weui-grid\">\n                            <mp-icon icon=\"{{item.icon}}\" color=\"{{item.color}}\" size=\"{{item.size}}\"></mp-icon>\n                            <view class=\"weui-grid__label\">{{item.icon}}</view>\n                        </view>\n                    </block>\n                </view>\n            </view>\n            <view class=\"icon-box\">\n                <view class=\"icon-box__title\">填充型</view>\n                <view class=\"weui-grids\">\n                    <block wx:for=\"{{iconList}}\" wx:key=\"*this\">\n                        <view class=\"weui-grid\">\n                            <mp-icon type=\"filled\" icon=\"{{item.icon}}\" color=\"{{item.color}}\" size=\"{{item.size}}\"></mp-icon>\n                            <view class=\"weui-grid__label\">{{item.icon}}</view>\n                        </view>\n                    </block>\n                </view>\n            </view>\n        </view>\n    </scroll-view>\n</view>\n"
  },
  {
    "path": "src/example/icons/icons.wxss",
    "content": "\n\nicon{\n    margin-right: 13px;\n}\n\n.weui-grid {\n    text-align: center;\n    padding: 36px 10px;\n}\n\n.page__bd {\n    padding-left: 15px;\n    padding-right: 15px;\n    text-align: left;\n}\n.icon-box{\n    margin-bottom: 25px;\n}\n.icon-box__ctn{\n    flex-shrink: 100;\n}\n.icon-item_box {\n    display: inline-block;\n    width: 25%;\n    padding: 3px;\n    height: 80px;\n    line-height: 30px;\n    text-align: center;\n    box-sizing: border-box;\n}\n.icon-name {\n    font-size: 24rpx;\n    overflow: hidden;\n    white-space:nowrap;\n    text-overflow:ellipsis;\n}\n.icon-box__title{\n    font-size: 18px;\n    margin: 5px 0;\n}\n\n/** skyline 不支持 float: left */\n.weui-grids {\n    display: flex;\n    flex-direction: row;\n    flex-wrap: wrap;\n}\n\n/** skyline 不支持 float: left */\n.weui-grid {\n    float: none;\n}\n"
  },
  {
    "path": "src/example/images/base64.js",
    "content": "module.exports = {\n    icon20: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAMAAABgZ9sFAAAAVFBMVEXx8fHMzMzr6+vn5+fv7+/t7e3d3d2+vr7W1tbHx8eysrKdnZ3p6enk5OTR0dG7u7u3t7ejo6PY2Njh4eHf39/T09PExMSvr6+goKCqqqqnp6e4uLgcLY/OAAAAnklEQVRIx+3RSRLDIAxE0QYhAbGZPNu5/z0zrXHiqiz5W72FqhqtVuuXAl3iOV7iPV/iSsAqZa9BS7YOmMXnNNX4TWGxRMn3R6SxRNgy0bzXOW8EBO8SAClsPdB3psqlvG+Lw7ONXg/pTld52BjgSSkA3PV2OOemjIDcZQWgVvONw60q7sIpR38EnHPSMDQ4MjDjLPozhAkGrVbr/z0ANjAF4AcbXmYAAAAASUVORK5CYII=\",\n    icon60: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAeFBMVEUAwAD///+U5ZTc9twOww7G8MYwzDCH4YcfyR9x23Hw+/DY9dhm2WZG0kbT9NP0/PTL8sux7LFe115T1VM+zz7i+OIXxhes6qxr2mvA8MCe6J6M4oz6/frr+us5zjn2/fa67rqB4IF13XWn6ad83nxa1loqyirn+eccHxx4AAAC/klEQVRo3u2W2ZKiQBBF8wpCNSCyLwri7v//4bRIFVXoTBBB+DAReV5sG6lTXDITiGEYhmEYhmEYhmEYhmEY5v9i5fsZGRx9PyGDne8f6K9cfd+mKXe1yNG/0CcqYE86AkBMBh66f20deBc7wA/1WFiTwvSEpBMA2JJOBsSLxe/4QEEaJRrASP8EVF8Q74GbmevKg0saa0B8QbwBdjRyADYxIhqxAZ++IKYtciPXLQVG+imw+oo4Bu56rjEJ4GYsvPmKOAB+xlz7L5aevqUXuePWVhvWJ4eWiwUQ67mK51qPj4dFDMlRLBZTqF3SDvmr4BwtkECu5gHWPkmDfQh02WLxXuvbvC8ku8F57GsI5e0CmUwLz1kq3kD17R1In5816rGvQ5VMk5FEtIiWislTffuDpl/k/PzscdQsv8r9qWq4LRWX6tQYtTxvI3XyrwdyQxChXioOngH3dLgOFjk0all56XRi/wDFQrGQU3Os5t0wJu1GNtNKHdPqYaGYQuRDfbfDf26AGLYSyGS3ZAK4S8XuoAlxGSdYMKwqZKM9XJMtyqXi7HX/CiAZS6d8bSVUz5J36mEMFDTlAFQzxOT1dzLRljjB6+++ejFqka+mXIe6F59mw22OuOw1F4T6lg/9VjL1rLDoI9Xzl1MSYDNHnPQnt3D1EE7PrXjye/3pVpr1Z45hMUdcACc5NVQI0bOdS1WA0wuz73e7/5TNqBPhQXPEFGJNV2zNqWI7QKBd2Gn6AiBko02zuAOXeWIXjV0jNqdKegaE/kJQ6Bfs4aju04lMLkA2T5wBSYPKDGF3RKhFYEa6A1L1LG2yacmsaZ6YPOSAMKNsO+N5dNTfkc5Aqe26uxHpx7ZirvgCwJpWq/lmX1hA7LyabQ34tt5RiJKXSwQ+0KU0V5xg+hZrd4Bn1n4EID+WkQdgLfRNtvil9SPfwy+WQ7PFBWQz6dGWZBLkeJFXZGCfLUjCgGgqXo5TuSu3cugdcTv/HjqnBTEMwzAMwzAMwzAMwzAMw/zf/AFbXiOA6frlMAAAAABJRU5ErkJggg==\"\n};"
  },
  {
    "path": "src/example/index.js",
    "content": "import CustomPage from '../base/CustomPage'\n\nCustomPage({\n    data: {\n        list: [\n            {\n                id: 'form',\n                name: '表单',\n                open: false,\n                pages: ['cell', 'slideview', 'form', 'uploader']\n            },\n            {\n                id: 'widget',\n                name: '基础组件',\n                open: false,\n                pages: [\n                    'article',\n                    'icons',\n                    'badge',\n                    'flex',\n                    'footer',\n                    'gallery',\n                    'grid',\n                    'loadmore',\n                    'loading',\n                    'panel',\n                    'preview'\n                ]\n            },\n            {\n                id: 'feedback',\n                name: '操作反馈',\n                open: false,\n                pages: ['dialog', 'msg', 'half-screen-dialog', 'actionsheet', 'toptips']\n            },\n            {\n                id: 'nav',\n                name: '导航相关',\n                open: false,\n                pages: ['navigation', 'tabbar']\n            },\n            {\n                id: 'search',\n                name: '搜索相关',\n                open: false,\n                pages: ['searchbar']\n            }\n        ]\n    },\n    kindToggle: function (e) {\n        const id = e.currentTarget.id,\n            list = this.data.list\n        console.log('kindToggle', id)\n        for (let i = 0, len = list.length; i < len; ++i) {\n            if (list[i].id == id) {\n                list[i].open = !list[i].open\n            } else {\n                list[i].open = false\n            }\n        }\n        this.setData({\n            list: list\n        })\n    },\n    themeToggle() {\n        const App = getApp()\n\n        if (App.themeChanged) {\n            if (App.globalData.theme === 'light') {\n                App.themeChanged('dark')\n            } else {\n                App.themeChanged('light')\n            }\n        }\n    },\n    // navigator 改成 view，兼容\n    openPage(e) {\n        const page = e.currentTarget.dataset.page\n        wx.navigateTo({\n            url: `${page}/${page}`\n        })\n    }\n})\n"
  },
  {
    "path": "src/example/index.json",
    "content": "{\n  \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../components/navigation-bar/navigation-bar\",\n    \"mp-cell\": \"../components/cell/cell\"\n  }\n}"
  },
  {
    "path": "src/example/index.less",
    "content": "@import '~weui-wxss/dist/example/index.wxss';\n\n.ft-img-cnt {\n    display: inline-block;\n    height: 20px;\n}\n"
  },
  {
    "path": "src/example/index.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"小程序UI组件库\" back=\"{{false}}\" />\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">小程序UI组件库</view>\n            <view class=\"page__desc\">小程序UI组件库是基于WeUI封装的组件库，是一套同微信原生视觉体验一致的组件库，由微信官方设计团队和小程序团队为微信小程序量身设计，令用户的使用感知更加统一。</view>\n        </view>\n        <view class=\"page__bd page__bd_spacing\">\n            <view class=\"kind-list\" role=\"menubar\">\n                <block wx:for=\"{{list}}\" wx:key=\"id\">\n                    <view class=\"kind-list__item\">\n                        <view\n                            id=\"{{item.id}}\"\n                            class=\"weui-flex kind-list__item-hd {{item.open ? 'kind-list__item-hd_show' : ''}}\"\n                            bindtap=\"kindToggle\"\n                            aria-role=\"button\"\n                            aria-haspopup\n                            aria-expanded=\"{{item.open}}\"\n                        >\n                            <view class=\"weui-flex__item\">{{item.name}}</view>\n                            <!-- <image class=\"kind-list__img\" src=\"images/icon_nav_{{item.id}}.png\"></image> -->\n                        </view>\n                        <view\n                            class=\"kind-list__item-bd {{item.open ? 'kind-list__item-bd_show' : ''}}\"\n                            aria-role=\"menu\"\n                            aria-hidden=\"{{!item.open}}\"\n                        >\n                            <view class=\"weui-cells {{item.open ? 'weui-cells_show' : ''}}\" tabindex=\"0\">\n                                <block wx:for=\"{{item.pages}}\" wx:for-item=\"page\" wx:key=\"*this\">\n                                    <view aria-role=\"menuitem\" bindtap=\"openPage\" data-page=\"{{page}}\">\n                                        <mp-cell link aria-role=\"link\">{{page}}</mp-cell>\n                                    </view>\n                                </block>\n                            </view>\n                        </view>\n                    </view>\n                </block>\n            </view>\n        </view>\n        <view class=\"page__ft\">\n            <view class=\"ft-img-cnt\" bindtap=\"themeToggle\">\n                <image src=\"images/icon_footer.png\" style=\"width: 84px; height: 19px;\"></image>\n            </view>\n        </view>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/loading/loading.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({\n  data: {\n    tips: '请稍后',\n    show: true,\n    animated: true\n  },\n  onShow() {\n    this.timer = setInterval(() => {\n      this.setData({\n        show: !this.data.show\n      })\n    }, 2000)\n  },\n  close() {\n    this.setData({\n      animated: !this.data.animated\n    })\n  },\n  onUnload() {\n    clearInterval(this.timer)\n  }\n})"
  },
  {
    "path": "src/example/loading/loading.json",
    "content": "{\n      \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n        \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n        \"mp-loading\": \"../../components/loading/loading\"\n    }\n}"
  },
  {
    "path": "src/example/loading/loading.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Loading\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Loading</view>\n            <view class=\"page__desc\">加载中</view>\n        </view>\n        <view class=\"page__bd\">\n            <!-- <button bindtap=\"close\">关闭animateion</button> -->\n            <mp-loading type=\"circle\"></mp-loading>\n            <!-- <mp-loading type=\"circle\" tips=\"{{tips}}\"></mp-loading> -->\n            <mp-loading duration=\"{{900}}\" ext-class=\"demo0\" type=\"dot-gray\" show=\"{{show}}\" animated=\"{{animated}}\"></mp-loading>\n            <mp-loading type=\"dot-white\" ext-class=\"demo1\"></mp-loading>\n        </view>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/loading/loading.wxss",
    "content": "\n\n.page .demo0 {\n  height: 60px;\n  background: white;\n}\n\n.page .demo1 {\n  height: 60px;\n  background: rgba(0,0,0,.1);\n}\n"
  },
  {
    "path": "src/example/loadmore/loadmore.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({})"
  },
  {
    "path": "src/example/loadmore/loadmore.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-loading\": \"../../components/loading/loading\"\n  }\n}"
  },
  {
    "path": "src/example/loadmore/loadmore.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Loadmore\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Loadmore</view>\n            <view class=\"page__desc\">加载更多</view>\n        </view>\n        <view class=\"page__bd\">\n            <mp-loading type=\"circle\" show=\"{{true}}\"></mp-loading>\n            <!-- <view class=\"weui-loadmore\">\n                <view class=\"weui-loading\"></view>\n                <view class=\"weui-loadmore__tips\">正在加载</view>\n            </view> -->\n            <view class=\"weui-loadmore weui-loadmore_line\">\n                <view class=\"weui-loadmore__tips weui-loadmore__tips_in-line\">暂无数据</view>\n            </view>\n            <view class=\"weui-loadmore weui-loadmore_line weui-loadmore_dot\">\n                <view class=\"weui-loadmore__tips weui-loadmore__tips_in-line weui-loadmore__tips_in-dot\"></view>\n            </view>\n        </view>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/loadmore/loadmore.wxss",
    "content": "\n\n.page {\n    background-color: var(--weui-BG-2)\n}\n\n.weui-loadmore {\n  display: flex; /* skyline 不支持 inline */\n  justify-content: center;\n  align-items: center;\n}\n\n.weui-loadmore_line .weui-loadmore__tips {\n  top: -11.859px; /* skyline 不支持 em */\n  line-height: 21.0824px;\n  height: 21.0824px;\n}\n\n.weui-loadmore_dot .weui-loadmore__tips {\n  display: flex; /* skyline 不支持 inline */\n  justify-content: center;\n  align-items: center;\n}\n\n.weui-loadmore_dot .weui-loadmore__tips::before {\n  top: -2.108px; /* skyline 不支持 em */\n}"
  },
  {
    "path": "src/example/msg/msg.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    openSuccess: function () {\n        wx.navigateTo({\n            url: 'msg_success'\n        })\n    },\n    openText: function () {\n        wx.navigateTo({\n            url: 'msg_text'\n        })\n    },\n    openTextPrimary: function () {\n        wx.navigateTo({\n            url: 'msg_text_primary'\n        })\n    },\n    openFail: function () {\n        wx.navigateTo({\n            url: 'msg_fail'\n        })\n    }\n});\n"
  },
  {
    "path": "src/example/msg/msg.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\"\n  }\n}"
  },
  {
    "path": "src/example/msg/msg.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Msg\"></mp-navigation-bar>\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Msg</view>\n        <view class=\"page__desc\">提示页</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-btn-area\">\n            <button class=\"weui-btn\" type=\"default\" bindtap=\"openSuccess\">成功提示页</button>\n            <button class=\"weui-btn mrt16\" type=\"default\" bindtap=\"openFail\">失败提示页</button>\n            <button class=\"weui-btn mrt16\" type=\"default\" bindtap=\"openText\">无图标提示页</button>\n            <button class=\"weui-btn mrt16\" type=\"default\" bindtap=\"openTextPrimary\">无图标提示页</button>\n        </view>\n    </view>\n</view>\n"
  },
  {
    "path": "src/example/msg/msg.wxss",
    "content": "\n\npage{\n    background-color: #FFFFFF;\n}\n"
  },
  {
    "path": "src/example/msg/msg_fail.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({})"
  },
  {
    "path": "src/example/msg/msg_fail.json",
    "content": "{\n  \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-msg\": \"../../components/msg/msg\"\n  }\n}"
  },
  {
    "path": "src/example/msg/msg_fail.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Msg\"></mp-navigation-bar>\n    <mp-msg type=\"warn\" title=\"操作失败\">\n        <view slot=\"desc\">内容详情，可根据实际需要安排，如果换行则不超过规定长度，居中展现<navigator url=\"\" class=\"weui-msg__link\">文字链接</navigator></view>\n        <view slot=\"extend\">\n            <view>1. 说明1</view>\n            <view>2. 说明2</view>\n        </view>\n        <view slot=\"handle\">\n            <button class=\"weui-btn\" type=\"default\">辅助操作</button>\n        </view>\n        <view slot=\"footer\">\n            <view class=\"weui-footer__links\">\n                <navigator url=\"\" class=\"weui-footer__link\">底部链接文本</navigator>\n            </view>\n            <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n        </view>\n    </mp-msg>\n</view>\n"
  },
  {
    "path": "src/example/msg/msg_fail.wxss",
    "content": "\n\npage{\n    background-color: #FFFFFF;\n}\npage,.page{height:100%;}\n"
  },
  {
    "path": "src/example/msg/msg_success.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({})"
  },
  {
    "path": "src/example/msg/msg_success.json",
    "content": "{\n  \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-msg\": \"../../components/msg/msg\"\n  }\n}"
  },
  {
    "path": "src/example/msg/msg_success.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Msg\"></mp-navigation-bar>\n    <mp-msg type=\"success\" title=\"操作成功\">\n        <view slot=\"desc\">内容详情，可根据实际需要安排，如果换行则不超过规定长度，居中展现<navigator url=\"\" class=\"weui-msg__link\">文字链接</navigator></view>\n        <view slot=\"extend\">\n            <view>1. 说明1</view>\n            <view>2. 说明2</view>\n        </view>\n        <view slot=\"handle\">\n            <button class=\"weui-btn\" type=\"primary\">主要操作</button>\n            <button class=\"weui-btn mrt16\" type=\"default\">辅助操作</button>\n        </view>\n        <view slot=\"footer\">\n            <view class=\"weui-footer__links\">\n                <navigator url=\"\" class=\"weui-footer__link\">底部链接文本</navigator>\n            </view>\n            <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n        </view>\n    </mp-msg>\n</view>\n"
  },
  {
    "path": "src/example/msg/msg_success.wxss",
    "content": "\n\npage{\n    background-color: #FFFFFF;\n}\npage,.page{height:100%;}\n"
  },
  {
    "path": "src/example/msg/msg_text.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({})\n"
  },
  {
    "path": "src/example/msg/msg_text.json",
    "content": "{\n  \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-msg\": \"../../components/msg/msg\"\n  }\n}"
  },
  {
    "path": "src/example/msg/msg_text.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Msg\"></mp-navigation-bar>\n    <mp-msg title=\"操作提示的text\">\n        <view slot=\"desc\">内容详情，可根据实际需要安排，如果换行则不超过规定长度，居中展现<navigator url=\"\" class=\"weui-msg__link\">文字链接</navigator></view>\n        <view slot=\"extend\">\n            <view>1. 说明1</view>\n            <view>2. 说明2</view>\n        </view>\n        <view slot=\"handle\">\n            <button class=\"weui-btn\" type=\"default\">辅助操作</button>\n        </view>\n        <view slot=\"footer\">\n            <view class=\"weui-footer__links\">\n                <navigator url=\"\" class=\"weui-footer__link\">底部链接文本</navigator>\n            </view>\n            <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n        </view>\n    </mp-msg>\n</view>\n"
  },
  {
    "path": "src/example/msg/msg_text.wxss",
    "content": "\n\npage{\n    background-color: #FFFFFF;\n}\npage,.page{height:100%;}\n"
  },
  {
    "path": "src/example/msg/msg_text_primary.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({})"
  },
  {
    "path": "src/example/msg/msg_text_primary.json",
    "content": "{\n  \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-msg\": \"../../components/msg/msg\"\n  }\n}"
  },
  {
    "path": "src/example/msg/msg_text_primary.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Msg\"></mp-navigation-bar>\n    <mp-msg title=\"操作提示primary text\">\n        <view slot=\"desc\">内容详情，可根据实际需要安排，如果换行则不超过规定长度，居中展现<navigator url=\"\" class=\"weui-msg__link\">文字链接</navigator></view>\n        <view slot=\"extend\">\n            <view>1. 说明1</view>\n            <view>2. 说明2</view>\n        </view>\n        <view slot=\"handle\">\n            <button class=\"weui-btn\" type=\"primary\">主要操作</button>\n        </view>\n        <view slot=\"footer\">\n            <view class=\"weui-footer__links\">\n                <navigator url=\"\" class=\"weui-footer__link\">底部链接文本</navigator>\n            </view>\n            <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n        </view>\n    </mp-msg>\n</view>\n"
  },
  {
    "path": "src/example/msg/msg_text_primary.wxss",
    "content": "\n\npage{\n    background-color: #FFFFFF;\n}\npage,.page{height:100%;}\n"
  },
  {
    "path": "src/example/navbar/navbar.js",
    "content": "var sliderWidth = 96; // 需要设置slider的宽度，用于计算中间位置\n\nPage({\n    data: {\n        tabs: [\"选项一\", \"选项二\", \"选项三\"],\n        activeIndex: 1,\n        sliderOffset: 0,\n        sliderLeft: 0\n    },\n    onLoad: function () {\n        var that = this;\n        wx.getSystemInfo({\n            success: function(res) {\n                that.setData({\n                    sliderLeft: (res.windowWidth / that.data.tabs.length - sliderWidth) / 2,\n                    sliderOffset: res.windowWidth / that.data.tabs.length * that.data.activeIndex\n                });\n            }\n        });\n    },\n    tabClick: function (e) {\n        this.setData({\n            sliderOffset: e.currentTarget.offsetLeft,\n            activeIndex: e.currentTarget.id\n        });\n    }\n});"
  },
  {
    "path": "src/example/navbar/navbar.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/example/navbar/navbar.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__bd\">\n        <view class=\"weui-tab\">\n            <view class=\"weui-navbar\">\n                <block wx:for=\"{{tabs}}\" wx:key=\"*this\">\n                    <view id=\"{{index}}\" class=\"weui-navbar__item {{activeIndex == index ? 'weui-bar__item_on' : ''}}\" bindtap=\"tabClick\">\n                        <view class=\"weui-navbar__title\">{{item}}</view>\n                    </view>\n                </block>\n            </view>\n            <view class=\"weui-tab__panel\">\n                <view class=\"weui-tab__content\" style=\"display: {{activeIndex === 0 ? 'block' : 'none'}}\">选项一的内容</view>\n                <view class=\"weui-tab__content\" style=\"display: {{activeIndex === 1 ? 'block' : 'none'}}\">选项二的内容</view>\n                <view class=\"weui-tab__content\" style=\"display: {{activeIndex === 2 ? 'block' : 'none'}}\">选项三的内容</view>\n            </view>\n        </view>\n    </view>\n</view>\n"
  },
  {
    "path": "src/example/navbar/navbar.wxss",
    "content": "\n\npage,\n.page,\n.page__bd{\n    height: 100%;\n}\n.page__bd{\n    padding-bottom: 0;\n}\n.weui-tab__content{\n    padding-top: 60px;\n    text-align: center;\n}"
  },
  {
    "path": "src/example/navigation/navigation.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    data: {\n        loading: false,\n        show: true,\n        animated: false,\n        title: 'UI组件库'\n    },\n    toggleLoading() {\n        this.setData({\n            loading: !this.data.loading\n        })\n    },\n    changeTitle() {\n        this.setData({\n            title: '修改标题内容之后的标题长这个样子'\n        })\n    },\n    changeColor() {\n        this.setData({\n            color: '#07C160'\n        })\n    },\n    changeBgColor() {\n        this.setData({\n            background: '#adadad'\n        })\n    },\n    toggleShow() {\n        this.setData({\n            show: !this.data.show\n        })\n    },\n    toggleAnimated() {\n        this.setData({\n            animated: !this.data.animated,\n            show: !this.data.show\n        })\n    }\n})"
  },
  {
    "path": "src/example/navigation/navigation.json",
    "content": "{\n      \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n        \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\"\n    },\n    \"navigationStyle\": \"custom\"\n}"
  },
  {
    "path": "src/example/navigation/navigation.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar loading=\"{{loading}}\" show=\"{{show}}\" animated=\"{{animated}}\" color=\"{{color}}\" background=\"{{background}}\" title=\"{{title}}\" back=\"{{true}}\"></mp-navigation-bar>\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Navigation</view>\n        <view class=\"page__desc\">小程序自定义导航栏</view>\n    </view>\n    <view class=\"page__bd page__bd_spacing\">\n        <button class=\"weui-btn\" type=\"primary\" bindtap=\"toggleLoading\">触发loading</button>\n        <button class=\"weui-btn mrt16\" type=\"primary\" bindtap=\"changeTitle\">修改标题内容</button>\n        <button class=\"weui-btn mrt16\" type=\"primary\" bindtap=\"changeColor\">修改文字颜色</button>\n        <button class=\"weui-btn mrt16\" type=\"primary\" bindtap=\"changeBgColor\">修改背景颜色</button>\n        <button class=\"weui-btn mrt16\" type=\"primary\" bindtap=\"toggleShow\">显示 / 隐藏</button>\n        <button class=\"weui-btn mrt16\" type=\"primary\" bindtap=\"toggleAnimated\">设置显示 / 隐藏opacity动画</button>\n    </view>\n</view>"
  },
  {
    "path": "src/example/navigation/navigation.wxss",
    "content": "\n"
  },
  {
    "path": "src/example/panel/panel.js",
    "content": "var base64 = require(\"../images/base64\");\nimport CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    onLoad: function(){\n        this.setData({\n            icon20: base64.icon20,\n            icon60: base64.icon60\n        });\n    }\n});"
  },
  {
    "path": "src/example/panel/panel.json",
    "content": "{\n  \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-cell\": \"../../components/cell/cell\"\n  }\n}"
  },
  {
    "path": "src/example/panel/panel.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Panel\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Panel</view>\n            <view class=\"page__desc\">面板</view>\n        </view>\n        <view class=\"page__bd\">\n            <view class=\"weui-panel weui-panel_access\">\n                <view class=\"weui-panel__hd\">图文组合列表</view>\n                <view class=\"weui-panel__bd\">\n                    <view url=\"\" class=\"weui-media-box weui-media-box_appmsg\" hover-class=\"weui-cell_active\">\n                        <view class=\"weui-media-box__hd weui-media-box__hd_in-appmsg\">\n                            <image class=\"weui-media-box__thumb\" src=\"{{icon60}}\" />\n                        </view>\n                        <view class=\"weui-media-box__bd weui-media-box__bd_in-appmsg\">\n                            <view class=\"weui-media-box__title\">标题一</view>\n                            <view class=\"weui-media-box__desc\">由各种物质组成的巨型球状天体，叫做星球。星球有一定的形状，有自己的运行轨道。</view>\n                        </view>\n                    </view>\n                    <view url=\"\" class=\"weui-media-box weui-media-box_appmsg\" hover-class=\"weui-cell_active\">\n                        <view class=\"weui-media-box__hd weui-media-box__hd_in-appmsg\">\n                            <image class=\"weui-media-box__thumb\" src=\"{{icon60}}\" />\n                        </view>\n                        <view class=\"weui-media-box__bd weui-media-box__bd_in-appmsg\">\n                            <view class=\"weui-media-box__title\">标题二</view>\n                            <view class=\"weui-media-box__desc\">由各种物质组成的巨型球状天体，叫做星球。星球有一定的形状，有自己的运行轨道。</view>\n                        </view>\n                    </view>\n                </view>\n                <view class=\"weui-panel__ft\">\n                    <mp-cell link ext-class=\"weui-cell_link\">查看更多</mp-cell>\n                </view>\n            </view>\n            <view class=\"weui-panel weui-panel_access\">\n                <view class=\"weui-panel__hd\">文字组合列表</view>\n                <view class=\"weui-panel__bd\">\n                    <view class=\"weui-media-box weui-media-box_text\">\n                        <view class=\"weui-media-box__title weui-media-box__title_in-text\">标题一</view>\n                        <view class=\"weui-media-box__desc\">由各种物质组成的巨型球状天体，叫做星球。星球有一定的形状，有自己的运行轨道。</view>\n                    </view>\n                    <view class=\"weui-media-box weui-media-box_text\">\n                        <view class=\"weui-media-box__title weui-media-box__title_in-text\">标题二</view>\n                        <view class=\"weui-media-box__desc\">由各种物质组成的巨型球状天体，叫做星球。星球有一定的形状，有自己的运行轨道。</view>\n                    </view>\n                </view>\n                <view class=\"weui-panel__ft\">\n                    <mp-cell link ext-class=\"weui-cell_link\">查看更多</mp-cell>\n                </view>\n            </view>\n            <view class=\"weui-panel\">\n                <view class=\"weui-panel__hd\">小图文组合列表</view>\n                <view class=\"weui-panel__bd\">\n                    <view class=\"weui-media-box weui-media-box_small-appmsg\">\n                        <view class=\"weui-cells weui-cells_in-small-appmsg\">\n                            <view url=\"\" class=\"weui-cell weui-cell_example weui-cell_access\" hover-class=\"weui-cell_active\">\n                                <view class=\"weui-cell__hd\"><image src=\"{{icon20}}\" style=\"width: 20px;height: 20px;margin-right: 16px;vertical-align:middle;\" /></view>\n                                <view class=\"weui-cell__bd weui-cell_primary\">\n                                    <view>文字标题</view>\n                                </view>\n                                <view class=\"weui-cell__ft weui-cell__ft_in-access\"></view>\n                            </view>\n                            <view url=\"\" class=\"weui-cell weui-cell_example weui-cell_access\" hover-class=\"weui-cell_active\">\n                                <view class=\"weui-cell__hd\"><image src=\"{{icon20}}\" style=\"width: 20px;height: 20px;margin-right: 16px;vertical-align:middle;\" /></view>\n                                <view class=\"weui-cell__bd weui-cell_primary\">\n                                    <view>文字标题</view>\n                                </view>\n                                <view class=\"weui-cell__ft weui-cell__ft_in-access\"></view>\n                            </view>\n                        </view>\n                    </view>\n                </view>\n            </view>\n            <view class=\"weui-panel\">\n                <view class=\"weui-panel__hd\">文字列表附来源</view>\n                <view class=\"weui-panel__bd\">\n                    <view class=\"weui-media-box weui-media-box_text\">\n                        <view class=\"weui-media-box__title weui-media-box__title_in-text\">标题一</view>\n                        <view class=\"weui-media-box__desc\">由各种物质组成的巨型球状天体，叫做星球。星球有一定的形状，有自己的运行轨道。</view>\n                        <view class=\"weui-media-box__info\">\n                            <view class=\"weui-media-box__info__meta\">文字来源</view>\n                            <view class=\"weui-media-box__info__meta\">时间</view>\n                            <view class=\"weui-media-box__info__meta weui-media-box__info__meta_extra\">其它信息</view>\n                        </view>\n                    </view>\n                </view>\n            </view>\n        </view>\n    </scroll-view>\n</view>\n"
  },
  {
    "path": "src/example/panel/panel.wxss",
    "content": "/* example/panel/panel.wxss */\n\n.weui-media-box__info {\n  display: flex;\n  flex-direction: row;\n}\n\n.weui-media-box__info__meta {\n  float: none; /* skyline 不支持 float */\n  padding-right: 12.235px; /* skyline 不支持 em */\n}\n\n.weui-media-box__info__meta_extra {\n  padding-left: 12.235px; /* skyline 不支持 em */\n}\n"
  },
  {
    "path": "src/example/picker/picker.js",
    "content": "Page({\n    data: {\n        array: ['美国', '中国', '巴西', '日本'],\n        index: 0,\n        date: '2016-09-01',\n        time: '12:01'\n    },\n    bindPickerChange: function(e) {\n        console.log('picker发送选择改变，携带值为', e.detail.value)\n        this.setData({\n            index: e.detail.value\n        })\n    },\n    bindDateChange: function(e) {\n        this.setData({\n            date: e.detail.value\n        })\n    },\n    bindTimeChange: function(e) {\n        this.setData({\n            time: e.detail.value\n        })\n    }\n});"
  },
  {
    "path": "src/example/picker/picker.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/example/picker/picker.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Picker</view>\n        <view class=\"page__desc\">选择器，这里使用小程序原生的picker。</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-btn-area\">\n            <picker bindchange=\"bindPickerChange\" value=\"{{index}}\" range=\"{{array}}\">\n                <button class=\"weui-btn\" type=\"default\">单列选择器</button>\n            </picker>\n            <picker mode=\"time\" value=\"{{time}}\" start=\"09:01\" end=\"21:01\" bindchange=\"bindTimeChange\">\n                <button class=\"weui-btn\" type=\"default\">时间选择器</button>\n            </picker>\n            <picker mode=\"date\" value=\"{{date}}\" start=\"2015-09-01\" end=\"2017-09-01\" bindchange=\"bindDateChange\">\n                <button class=\"weui-btn\" type=\"default\">日期选择器</button>\n            </picker>\n        </view>\n    </view>\n</view>\n"
  },
  {
    "path": "src/example/picker/picker.wxss",
    "content": "\n\npage{\n    background-color: #FFFFFF;\n}\npicker{margin-bottom:16px;}\n"
  },
  {
    "path": "src/example/preview/preview.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({})"
  },
  {
    "path": "src/example/preview/preview.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\"\n  }\n}"
  },
  {
    "path": "src/example/preview/preview.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Preview\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Preview</view>\n            <view class=\"page__desc\">表单预览</view>\n        </view>\n        <view class=\"page__bd\">\n            <view class=\"weui-form-preview\">\n                <view class=\"weui-form-preview__hd\">\n                    <view class=\"weui-form-preview__item\">\n                        <view class=\"weui-form-preview__label\">付款金额</view>\n                        <view class=\"weui-form-preview__value_in-hd\">¥2400.00</view>\n                    </view>\n                </view>\n                <view class=\"weui-form-preview__bd\">\n                    <view class=\"weui-form-preview__item\">\n                        <view class=\"weui-form-preview__label\">商品</view>\n                        <view class=\"weui-form-preview__value\">电动打蛋机</view>\n                    </view>\n                    <!-- <view class=\"weui-form-preview__item\">\n                        <view class=\"weui-form-preview__label\">标题标题</view>\n                        <view class=\"weui-form-preview__value\">名字名字名字</view>\n                    </view>\n                    <view class=\"weui-form-preview__item\">\n                        <view class=\"weui-form-preview__label\">标题标题</view>\n                        <view class=\"weui-form-preview__value\">很长很长的名字很长很长的名字很长很长的名字很长很长的名字很长很长的名字</view>\n                    </view> -->\n                </view>\n                <view class=\"weui-form-preview__ft\">\n                    <navigator url=\"\" class=\"weui-form-preview__btn weui-form-preview__btn_primary\" hover-class=\"weui-hover-active\">操作</navigator>\n                </view>\n            </view>\n            <view class=\"weui-form-preview\">\n                <view class=\"weui-form-preview__hd\">\n                    <view class=\"weui-form-preview__label\">付款金额</view>\n                    <view class=\"weui-form-preview__value_in-hd\">¥2400.00</view>\n                </view>\n                <view class=\"weui-form-preview__bd\">\n                    <view class=\"weui-form-preview__item\">\n                        <view class=\"weui-form-preview__label\">商品</view>\n                        <view class=\"weui-form-preview__value\">电动打蛋机</view>\n                    </view>\n                    <view class=\"weui-form-preview__item\">\n                        <view class=\"weui-form-preview__label\">标题标题</view>\n                        <view class=\"weui-form-preview__value\">名字名字名字</view>\n                    </view>\n                    <view class=\"weui-form-preview__item\">\n                        <view class=\"weui-form-preview__label\">标题标题</view>\n                        <view class=\"weui-form-preview__value\">很长很长的名字很长很长的名字很长很长的名字很长很长的名字很长很长的名字</view>\n                    </view>\n                </view>\n                <view class=\"weui-form-preview__ft\">\n                    <navigator class=\"weui-form-preview__btn weui-form-preview__btn_default\" hover-class=\"weui-hover-active\">辅助操作</navigator>\n                    <navigator class=\"weui-form-preview__btn weui-form-preview__btn_primary\" hover-class=\"weui-hover-active\">操作</navigator>\n                </view>\n            </view>\n        </view>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/preview/preview.wxss",
    "content": "\n\n.weui-form-preview{\n    margin-bottom: 25px;\n}\n\n.weui-form-preview__bd {\n    font-size: 13.5529px; /* skyline 不支持 em */\n}\n\n.weui-form-preview__item {\n    display: flex; /* skyline 不支持 float */\n}\n\n.weui-form-preview__item .weui-form-preview__value {\n    flex: 1 1 0;\n}\n\n.weui-form-preview__bd .weui-form-preview__label {\n    margin-right: 15px;\n    width: 56.922px;\n}"
  },
  {
    "path": "src/example/progress/progress.js",
    "content": "function _next(){\n    var that = this;\n    if(this.data.progress >= 100){\n        this.setData({\n            disabled: false\n        });\n        return true;\n    }\n    this.setData({\n        progress: ++this.data.progress\n    });\n    setTimeout(function(){\n        _next.call(that);\n    }, 20);\n}\n\nPage({\n    data: {\n        progress: 0,\n        disabled: false\n    },\n    upload: function(){\n        if(this.data.disabled) return;\n\n        this.setData({\n            progress: 0,\n            disabled: true\n        });\n        _next.call(this);\n    }\n});"
  },
  {
    "path": "src/example/progress/progress.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/example/progress/progress.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Progress</view>\n        <view class=\"page__desc\">进度条，这里采用小程序原生的progress</view>\n    </view>\n    <view class=\"page__bd page__bd_spacing\">\n        <view class=\"weui-progress\">\n            <view class=\"weui-progress__bar\">\n                <progress percent=\"0\" stroke-width=\"3\" />\n            </view>\n            <view class=\"weui-progress__opr\">\n                <icon type=\"cancel\" size=\"22\"></icon>\n            </view>\n        </view>\n        <view class=\"weui-progress\">\n            <view class=\"weui-progress__bar\">\n                <progress percent=\"50\" stroke-width=\"3\" />\n            </view>\n            <view class=\"weui-progress__opr\">\n                <icon type=\"cancel\" size=\"22\"></icon>\n            </view>\n        </view>\n        <view class=\"weui-progress\">\n            <view class=\"weui-progress__bar\">\n                <progress percent=\"80\" stroke-width=\"3\" />\n            </view>\n            <view class=\"weui-progress__opr\">\n                <icon type=\"cancel\" size=\"22\"></icon>\n            </view>\n        </view>\n        <view class=\"weui-progress\">\n            <view class=\"weui-progress__bar\">\n                <progress percent=\"{{progress}}\" stroke-width=\"3\" />\n            </view>\n            <view class=\"weui-progress__opr\">\n                <icon type=\"cancel\" size=\"22\"></icon>\n            </view>\n        </view>\n        <view class=\"weui-btn-area\">\n            <button type=\"primary\" bindtap=\"upload\" disabled=\"{{disabled}}\">上传</button>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "src/example/progress/progress.wxss",
    "content": "\n\npage{background-color:#FFFFFF;}\n.weui-progress{\n    margin-bottom: 24px;\n}\n"
  },
  {
    "path": "src/example/searchbar/searchbar.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    data: {\n        inputShowed: false,\n        inputVal: \"\",\n        i: 0\n    },\n    onLoad() {\n        this.setData({\n            search: this.search.bind(this)\n        })\n    },\n    search: function (value) {\n        return new Promise((resolve, reject) => {\n            if (this.data.i % 2 === 0) {\n                setTimeout(() => {\n                    resolve([{text: '搜索结果', value: 1}, {text: '搜索结果2', value: 2}])\n                }, 200)\n            } else {\n                setTimeout(() => {\n                    resolve([])\n                }, 200)\n\n            }\n            this.setData({\n                i: this.data.i + 1\n            })\n        })\n    },\n    selectResult: function (e) {\n        console.log('select result', e.detail)\n    },\n});"
  },
  {
    "path": "src/example/searchbar/searchbar.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-searchbar\": \"../../components/searchbar/searchbar\"\n  }\n}"
  },
  {
    "path": "src/example/searchbar/searchbar.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"SearchBar\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">SearchBar</view>\n            <view class=\"page__desc\">搜索栏</view>\n        </view>\n        <view class=\"page__bd\">\n            <mp-searchbar bindselectresult=\"selectResult\" search=\"{{search}}\"></mp-searchbar>\n        </view>\n    </scroll-view>\n</view>\n"
  },
  {
    "path": "src/example/searchbar/searchbar.wxss",
    "content": "\n\n.searchbar-result{\n    margin-top: 0;\n    font-size: 14px;\n}\n\n.searchbar-result:before{\n    display: none;\n}\n"
  },
  {
    "path": "src/example/slider/slider.js",
    "content": "Page({});"
  },
  {
    "path": "src/example/slider/slider.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/example/slider/slider.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Slider</view>\n        <view class=\"page__desc\">滑块，这里采用小程序原生的slider。</view>\n    </view>\n\n    <view class=\"page__bd page__bd_spacing\">\n        <slider/>\n        <slider show-value value=\"50\"/>\n    </view>\n</view>"
  },
  {
    "path": "src/example/slider/slider.wxss",
    "content": "\n\nslider{\n    margin-bottom: 30px;\n}"
  },
  {
    "path": "src/example/slideview/slideview.js",
    "content": "import base64 from '../images/base64'\nimport CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    onLoad: function () {\n        this.setData({\n            icon: base64.icon20,\n            slideButtons: [\n                {\n                    text: '普通',\n                    src: require('/example/cell/icon_love.svg').default // icon的路径\n                },\n                {\n                    text: '普通',\n                    extClass: 'test',\n                    src: require('/example/cell/icon_star.svg').default // icon的路径\n                },\n                {\n                    type: 'warn',\n                    text: '警示',\n                    extClass: 'test',\n                    src: require('/example/cell/icon_del.svg').default // icon的路径\n                }\n            ]\n        })\n    },\n    show() {\n        console.log('show')\n    },\n    hide() {\n        console.log('hide')\n    },\n    slideButtonTap(e) {\n        console.log('slide button tap', e.detail)\n    }\n})\n"
  },
  {
    "path": "src/example/slideview/slideview.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-cells\": \"../../components/cells/cells\",\n    \"mp-cell\": \"../../components/cell/cell\",\n    \"mp-slideview\": \"../../components/slideview/slideview\"\n  }\n}"
  },
  {
    "path": "src/example/slideview/slideview.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n  <mp-navigation-bar title=\"SlideView\"></mp-navigation-bar>\n  <scroll-view type=\"list\" scroll-y class=\"page-height\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Slideview</view>\n        <view class=\"page__desc\">左滑操作</view>\n    </view>\n    <view class=\"page__bd\">\n      <view class=\"weui-cells\">\n          <mp-slideview show=\"{{true}}\" buttons=\"{{slideButtons}}\" bindshow=\"show\" bindhide=\"hide\" bindbuttontap=\"slideButtonTap\">\n              <mp-cell value=\"左滑可以删除\" footer=\"说明文字\"></mp-cell>\n          </mp-slideview>\n      </view>\n\n      <view class=\"weui-slidecells\">\n        <mp-slideview buttons=\"{{slideButtons}}\" icon=\"{{true}}\" bindshow=\"show\" bindhide=\"hide\" bindbuttontap=\"slideButtonTap\">\n          <view class=\"weui-slidecell\">\n            左滑可以删除（图标Button）\n          </view>\n        </mp-slideview>\n      </view>\n    </view>\n  </scroll-view>\n</view>\n"
  },
  {
    "path": "src/example/slideview/slideview.wxss",
    "content": "\n\n.weui-slidecells {\n  margin:8px;\n}\n\n.weui-slidecell {\n  background-color: var(--weui-BG-2);\n  border-radius: 8px;\n  padding: 26px;\n  line-height: 1.4;\n  font-size: 17px;\n}\n"
  },
  {
    "path": "src/example/tabbar/tabbar.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nconst app = getApp()\n\nCustomPage({\n    data: {\n        list: [\n            {\n                text: '微信',\n                iconPath: app.globalData.iconTabbar,\n                selectedIconPath: app.globalData.iconTabbar,\n                badge: '8',\n                ariaLabel: '8个新通知'\n            },\n            {\n                text: '通讯录',\n                iconPath: app.globalData.iconTabbar,\n                selectedIconPath: app.globalData.iconTabbar\n            },\n            {\n                text: '发现',\n                iconPath: app.globalData.iconTabbar,\n                selectedIconPath: app.globalData.iconTabbar,\n                dot: true,\n                ariaLabel: '未读'\n            },\n            {\n                text: '我',\n                iconPath: app.globalData.iconTabbar,\n                selectedIconPath: app.globalData.iconTabbar\n            }\n        ]\n    },\n    tabChange(e) {\n        console.log('tab change', e)\n    }\n})\n"
  },
  {
    "path": "src/example/tabbar/tabbar.json",
    "content": "{\n  \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-tabbar\": \"../../components/tabbar/tabbar\"\n  }\n}"
  },
  {
    "path": "src/example/tabbar/tabbar.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Tabbar\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Tabbar</view>\n            <view class=\"page__desc\">类似小程序原生tabbar的组件，可用于自定义tabbar</view>\n        </view>\n        <root-portal>\n            <view class=\"tabbar-container\">\n                <mp-tabbar class=\"tabbar\" list=\"{{list}}\" bindchange=\"tabChange\"></mp-tabbar>\n            </view>\n        </root-portal>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/tabbar/tabbar.wxss",
    "content": "/* example/tabbar/tabbar.wxss */\n\n\n/* @media only screen and (min-width: 450px) {\n  .page__hd {\n    margin-left: 60px;\n  }\n\n  .tabbar {\n    position:fixed;\n    top: 0;\n    bottom:0;\n    width: unset;\n    height: 100%;\n    left:0;\n    right: unset;\n  }\n} */\n\n.tabbar-container {\n  width: 100vw;\n  height: 100vh;\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.tabbar {\n  display: fixed;\n  position: absolute;\n  bottom: 0;\n  width: 100vw;\n  left: 0;\n  right: 0;\n}"
  },
  {
    "path": "src/example/toast/toast.js",
    "content": "Page({\n    openToast: function () {\n        wx.showToast({\n            title: '已完成',\n            icon: 'success',\n            duration: 3000\n        });\n    },\n    openLoading: function () {\n        wx.showToast({\n            title: '数据加载中',\n            icon: 'loading',\n            duration: 3000\n        });\n    }\n});"
  },
  {
    "path": "src/example/toast/toast.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {}\n}"
  },
  {
    "path": "src/example/toast/toast.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Toast</view>\n        <view class=\"page__desc\">弹出式提示，采用小程序原生的toast</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-btn-area\">\n            <button class=\"weui-btn\" type=\"default\" bindtap=\"openToast\">成功提示</button>\n            <button class=\"weui-btn\" type=\"default\" bindtap=\"openLoading\">加载中提示</button>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "src/example/toast/toast.wxss",
    "content": "\n\npage{\n    background-color: #FFFFFF;\n}"
  },
  {
    "path": "src/example/toptips/toptips.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    data: {\n        show1: false,\n        show2: false,\n        show3: false\n    },\n    showToptips1() {\n        this.setData({\n            show1: true\n        })\n    },\n    showToptips2() {\n        this.setData({\n            show2: true\n        })\n    },\n    showToptips3() {\n        this.setData({\n            show3: true\n        })\n    }\n})\n"
  },
  {
    "path": "src/example/toptips/toptips.json",
    "content": "{\n      \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n        \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n        \"mp-toptips\": \"../../components/toptips/toptips\"\n    }\n}"
  },
  {
    "path": "src/example/toptips/toptips.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Toptips\"></mp-navigation-bar>\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Toptips</view>\n    </view>\n    <view class=\"page__bd\">\n        <button class=\"weui-btn\" type=\"primary\" bindtap=\"showToptips1\">显示1</button>\n        <button class=\"weui-btn mrt16\" type=\"primary\" bindtap=\"showToptips2\">显示2</button>\n        <button class=\"weui-btn mrt16\" type=\"primary\" bindtap=\"showToptips3\">显示3</button>\n\n        <mp-toptips ext-class=\"top100\" msg=\"距离顶部100px\" type=\"error\" show=\"{{show1}}\"></mp-toptips>\n        <mp-toptips ext-class=\"top200\" msg=\"距离顶部200px\" type=\"info\" show=\"{{show2}}\"></mp-toptips>\n        <mp-toptips ext-class=\"top300\" msg=\"距离顶部300px\" type=\"success\" show=\"{{show3}}\"></mp-toptips>\n    </view>\n</view>\n"
  },
  {
    "path": "src/example/toptips/toptips.wxss",
    "content": "\n.weui-toptips.top100 {\n    top: 100px;\n}\n.weui-toptips.top200 {\n    top: 200px;\n}\n.weui-toptips.top300 {\n    top: 300px;\n}"
  },
  {
    "path": "src/example/uploader/uploader.js",
    "content": "import CustomPage from '../../base/CustomPage'\n\nCustomPage({\n    data: {\n        files: [{\n            url: 'http://mmbiz.qpic.cn/mmbiz_png/VUIF3v9blLsicfV8ysC76e9fZzWgy8YJ2bQO58p43Lib8ncGXmuyibLY7O3hia8sWv25KCibQb7MbJW3Q7xibNzfRN7A/0',\n        }]\n    },\n    onLoad() {\n        this.setData({\n            selectFile: this.selectFile.bind(this),\n            uploadFile: this.uploadFile.bind(this),\n        })\n    },\n    chooseImage: function (e) {\n        var that = this;\n        wx.chooseImage({\n            sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有\n            sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有\n            success: function (res) {\n                // 返回选定照片的本地文件路径列表，tempFilePath可以作为img标签的src属性显示图片\n                that.setData({\n                    files: that.data.files.concat(res.tempFilePaths)\n                });\n            }\n        })\n    },\n    previewImage: function(e){\n        wx.previewImage({\n            current: e.currentTarget.id, // 当前显示图片的http链接\n            urls: this.data.files // 需要预览的图片http链接列表\n        })\n    },\n    selectFile(files) {\n        console.log('files', files)\n        // 返回false可以阻止某次文件上传\n    },\n    uploadFile(files) {\n        console.log('upload files', files)\n        // 文件上传的函数，返回一个promise\n        return new Promise((resolve, reject) => {\n            setTimeout(() => {\n                reject('some error')\n            }, 1000)\n        })\n    },\n    uploadError(e) {\n        console.log('upload error', e.detail)\n    },\n    uploadSuccess(e) {\n        console.log('upload success', e.detail)\n    }\n});"
  },
  {
    "path": "src/example/uploader/uploader.json",
    "content": "{\n    \"componentFramework\": \"glass-easel\",\n  \"usingComponents\": {\n    \"mp-navigation-bar\": \"../../components/navigation-bar/navigation-bar\",\n    \"mp-uploader\": \"../../components/uploader/uploader\",\n    \"mp-cells\": \"../../components/cells/cells\",\n    \"mp-cell\": \"../../components/cell/cell\"\n  }\n}"
  },
  {
    "path": "src/example/uploader/uploader.wxml",
    "content": "<view class=\"page\" data-weui-theme=\"{{theme}}\">\n    <mp-navigation-bar title=\"Uploader\"></mp-navigation-bar>\n    <scroll-view type=\"list\" scroll-y class=\"page-height\">\n        <view class=\"page__hd\">\n            <view class=\"page__title\">Uploader</view>\n            <view class=\"page__desc\">上传组件</view>\n        </view>\n        <view class=\"page__bd\">\n            <mp-cells>\n                <mp-cell>\n                    <mp-uploader bindfail=\"uploadError\" bindsuccess=\"uploadSuccess\" select=\"{{selectFile}}\" upload=\"{{uploadFile}}\" files=\"{{files}}\" max-count=\"5\" title=\"图片上传\" tips=\"图片上传提示\"></mp-uploader>\n                </mp-cell>\n            </mp-cells>\n        </view>\n    </scroll-view>\n</view>"
  },
  {
    "path": "src/example/uploader/uploader.wxss",
    "content": "/* example/uploader/uploader.wxss */\n\n"
  },
  {
    "path": "src/project.config.json",
    "content": "{\n\t\"description\": \"项目配置文件。\",\n\t\"packOptions\": {\n\t\t\"ignore\": []\n\t},\n\t\"setting\": {\n\t\t\"urlCheck\": true,\n\t\t\"es6\": true,\n\t\t\"postcss\": true,\n\t\t\"minified\": true,\n\t\t\"newFeature\": true,\n\t\t\"nodeModules\": true\n\t},\n\t\"compileType\": \"miniprogram\",\n\t\"libVersion\": \"2.10.3\",\n\t\"appid\": \"wxe0b5580bba739b69\",\n\t\"projectname\": \"小程序自定义组件\",\n\t\"isGameTourist\": false,\n\t\"condition\": {\n\t\t\"search\": {\n\t\t\t\"current\": -1,\n\t\t\t\"list\": []\n\t\t},\n\t\t\"conversation\": {\n\t\t\t\"current\": -1,\n\t\t\t\"list\": []\n\t\t},\n\t\t\"game\": {\n\t\t\t\"currentL\": -1,\n\t\t\t\"list\": []\n\t\t},\n\t\t\"miniprogram\": {\n\t\t\t\"current\": -1,\n\t\t\t\"list\": []\n\t\t}\n\t}\n}"
  },
  {
    "path": "tools/build.js",
    "content": "const path = require('path')\n\nconst gulp = require('gulp')\nconst clean = require('gulp-clean')\nconst less = require('gulp-less')\nconst rename = require('gulp-rename')\nconst gulpif = require('gulp-if')\nconst sourcemaps = require('gulp-sourcemaps')\nconst webpack = require('webpack')\nconst gulpInstall = require('gulp-install')\n\nconst config = require('./config')\nconst checkComponents = require('./checkcomponents')\nconst checkWxss = require('./checkwxss')\nconst _ = require('./utils')\n\nconst wxssConfig = config.wxss || {}\nconst srcPath = config.srcPath\nconst distPath = config.distPath\n\n/**\n * 获取 wxss 流\n */\nfunction wxss(wxssFileList) {\n  if (!wxssFileList.length) return false\n\n  // 加上要忽略的列表\n  if (config.ignore) {\n    wxssFileList = wxssFileList.concat(config.ignore)\n  }\n  return gulp.src(wxssFileList, {cwd: srcPath, base: srcPath})\n    .pipe(checkWxss.start()) // 开始处理 import\n    // .pipe(gulpif(wxssConfig.less && wxssConfig.sourcemap, sourcemaps.init()))\n    // .pipe(gulpif(wxssConfig.less, less({paths: [srcPath]})))\n    .pipe(checkWxss.end()) // 结束处理 import\n    .pipe(rename({extname: '.wxss'}))\n    .pipe(gulpif(wxssConfig.less && wxssConfig.sourcemap, sourcemaps.write('./')))\n    .pipe(_.logger(wxssConfig.less ? 'generate' : undefined))\n    .pipe(gulp.dest(distPath))\n}\n/**\n * 获取 less 流\n */\nfunction buildLess(lessFileList) {\n  if (!lessFileList.length) return false\n  // 加上要忽略的列表\n  // if (config.ignore) {\n  //   lessFileList = lessFileList.concat(config.ignore)\n  // }\n  // console.log('build less', lessFileList, srcPath)\n  return gulp.src(lessFileList, {cwd: srcPath, base: srcPath})\n    // .pipe(checkWxss.start()) // 开始处理 import\n    .pipe(gulpif(wxssConfig.less && wxssConfig.sourcemap, sourcemaps.init()))\n    .pipe(gulpif(wxssConfig.less, less({paths: [srcPath], compress: true})))\n    // .pipe(checkWxss.end()) // 结束处理 import\n    .pipe(rename({extname: '.wxss'}))\n    .pipe(gulpif(wxssConfig.less && wxssConfig.sourcemap, sourcemaps.write('./')))\n    .pipe(_.logger(wxssConfig.less ? 'generate' : undefined))\n    .pipe(gulp.dest(distPath))\n}\n\n/**\n * 获取 js 流\n */\nfunction js(jsFileMap, scope) {\n  const webpackConfig = config.webpack\n  const webpackCallback = (err, stats) => {\n    if (!err) {\n      // eslint-disable-next-line no-console\n      console.log(stats.toString({\n        assets: true,\n        cached: false,\n        colors: true,\n        children: false,\n        errors: true,\n        warnings: true,\n        version: true,\n        modules: false,\n        publicPath: true,\n      }))\n    } else {\n      // eslint-disable-next-line no-console\n      console.log(err)\n    }\n  }\n  if (!jsFileMap.index) {\n    jsFileMap.index = path.resolve(path.join(path.dirname(__dirname), '../src/index.ts'))\n  }\n  webpackConfig.entry = jsFileMap\n  webpackConfig.output.path = distPath\n  // console.log('======jsfilemap', jsFileMap)\n  if (scope.webpackWatcher) {\n    scope.webpackWatcher.close()\n    scope.webpackWatcher = null\n  }\n\n  if (config.isWatch) {\n    scope.webpackWatcher = webpack(webpackConfig).watch({\n      ignored: /node_modules/,\n    }, webpackCallback)\n  } else {\n    webpack(webpackConfig).run(webpackCallback)\n  }\n}\n\n/**\n * 获取 ts 流\n */\nfunction ts(tsFileMap, scope) {\n  const webpackConfig = config.webpack\n  const webpackCallback = (err, stats) => {\n    if (!err) {\n      // eslint-disable-next-line no-console\n      console.log(stats.toString({\n        assets: true,\n        cached: false,\n        colors: true,\n        children: false,\n        errors: true,\n        warnings: true,\n        version: true,\n        modules: false,\n        publicPath: true,\n      }))\n    } else {\n      // eslint-disable-next-line no-console\n      console.log(err)\n    }\n  }\n\n  webpackConfig.entry = tsFileMap\n  webpackConfig.output.path = distPath\n  // console.log('=======log tsFileMap', tsFileMap, distPath)\n  if (scope.webpackWatcherTS) {\n    scope.webpackWatcherTS.close()\n    scope.webpackWatcherTS = null\n  }\n\n  if (config.isWatch) {\n    scope.webpackWatcherTS = webpack(webpackConfig).watch({\n      ignored: /node_modules/,\n    }, webpackCallback)\n  } else {\n    webpack(webpackConfig).run(webpackCallback)\n  }\n}\n\n/**\n * 拷贝文件\n */\nfunction copy(copyFileList) {\n  if (!copyFileList.length) return false\n  if (config.copy && config.copy.src) {\n    if (!Array.isArray(config.copy.src)) {\n      copyFileList.push(config.copy.src)\n    } else {\n      copyFileList = copyFileList.concat(config.copy.src)\n    }\n  }\n  // 加上要忽略的列表\n  if (config.copyIgnore) {\n    copyFileList = copyFileList.concat(config.copyIgnore)\n    // console.log('copy copyFileList', copyFileList)\n  }\n  return gulp.src(copyFileList, {cwd: srcPath, base: srcPath})\n    .pipe(_.logger())\n    .pipe(gulp.dest(distPath))\n}\n\n/**\n * 拷贝 weui-wxss 中的样式文件\n */\nfunction copyWeuiWxss() {\n  return gulp.src(config.copyWeuiWxss, {cwd: srcPath, base: srcPath})\n    .pipe(_.dealWithWeuiWxss())\n    .pipe(_.logger())\n    .pipe(gulp.dest(distPath))\n}\n\n/**\n * 安装依赖包\n */\nfunction install() {\n  return gulp.series(async () => {\n    const demoDist = config.demoDist\n    const demoPackageJsonPath = path.join(demoDist, 'package.json')\n    const packageJson = _.readJson(path.resolve(__dirname, '../package.json'))\n    const dependencies = packageJson.dependencies || {}\n\n    await _.writeFile(demoPackageJsonPath, JSON.stringify({dependencies}, null, '\\t')) // write dev demo's package.json\n  }, () => {\n    const demoDist = config.demoDist\n    const demoPackageJsonPath = path.join(demoDist, 'package.json')\n\n    return gulp.src(demoPackageJsonPath)\n      .pipe(gulpInstall({production: true}))\n  })\n}\n\nclass BuildTask {\n  constructor(id, entry) {\n    if (!entry) return\n\n    this.id = id\n    this.entries = Array.isArray(config.entry) ? config.entry : [config.entry]\n    this.copyList = Array.isArray(config.copy) ? config.copy : []\n    this.componentListMap = {}\n    this.cachedComponentListMap = {}\n\n    this.init()\n  }\n\n  init() {\n    const id = this.id\n\n    /**\n     * 清空目标目录\n     */\n    gulp.task(`${id}-clean-dist`, () => gulp.src(distPath, {read: false, allowEmpty: true}).pipe(clean()))\n\n    /**\n     * 拷贝 demo 到目标目录\n     */\n    let isDemoExists = false\n    gulp.task(`${id}-demo`, gulp.series(async () => {\n      const demoDist = config.demoDist\n\n      // 不检查demo是否存在\n      // isDemoExists = await _.checkFileExists(path.join(demoDist, 'project.config.json'))\n    }, done => {\n      if (!isDemoExists) {\n        const demoSrc = config.demoSrc\n        const demoDist = config.demoDist\n\n        return gulp.src('**/*', {cwd: demoSrc, base: demoSrc})\n          .pipe(gulp.dest(demoDist))\n      }\n\n      return done()\n    }))\n\n    /**\n     * 安装依赖包\n     */\n    gulp.task(`${id}-install`, install())\n    /**\n     * 生成package.json\n     */\n    gulp.task(`${id}-package-json`, (done) => {\n      const pkgJson = _.readJson(path.resolve(__dirname, '../package.json'));\n      const json = {};\n      ['name', 'version', 'description', 'author', 'license'].forEach((item) => {\n        json[item] = pkgJson[item]\n      })\n      _.writeFile(path.join(distPath, 'package.json'), JSON.stringify(json, null, 4))\n      return done()\n    })\n    /**\n     * 检查自定义组件\n     */\n    gulp.task(`${id}-component-check`, async () => {\n      const entries = this.entries\n      const mergeComponentListMap = {}\n      for (let i = 0, len = entries.length; i < len; i++) {\n        let entry = entries[i]\n        entry = path.join(srcPath, `${entry}.json`)\n        // eslint-disable-next-line no-await-in-loop\n        const newComponentListMap = await checkComponents(entry)\n\n        _.merge(mergeComponentListMap, newComponentListMap)\n      }\n\n      this.cachedComponentListMap = this.componentListMap\n      this.componentListMap = mergeComponentListMap\n    })\n\n    /**\n     * 写 json 文件到目标目录\n     */\n    gulp.task(`${id}-component-json`, done => {\n      const jsonFileList = this.componentListMap.jsonFileList\n\n      if (jsonFileList && jsonFileList.length) {\n        // 去掉 index.json\n        return copy(this.componentListMap.jsonFileList.filter(file => (file !== 'index.json')))\n      }\n\n      return done()\n    })\n\n    /**\n     * 拷贝 wxml 文件到目标目录\n     */\n    gulp.task(`${id}-component-wxml`, done => {\n      const wxmlFileList = this.componentListMap.wxmlFileList\n\n      if (wxmlFileList &&\n        wxmlFileList.length &&\n        !_.compareArray(this.cachedComponentListMap.wxmlFileList, wxmlFileList)) {\n        return copy(wxmlFileList)\n      }\n\n      return done()\n    })\n\n    /**\n     * 生成 wxss 文件到目标目录\n     */\n    gulp.task(`${id}-component-wxss`, done => {\n      const wxssFileList = this.componentListMap.wxssFileList\n      // console.log('wxssFileList file list', wxssFileList)\n      if (wxssFileList &&\n        wxssFileList.length &&\n        !_.compareArray(this.cachedComponentListMap.wxssFileList, wxssFileList)) {\n        return wxss(wxssFileList, srcPath, distPath)\n      }\n\n      return done()\n    })\n\n    /**\n     * 生成 less 文件到目标目录\n     */\n    gulp.task(`${id}-component-less`, done => {\n      const lessFileList = this.componentListMap.lessFileList\n\n      if (lessFileList &&\n        lessFileList.length &&\n        !_.compareArray(this.cachedComponentListMap.lessFileList, lessFileList)) {\n        return buildLess(lessFileList, srcPath, distPath)\n      }\n\n      return done()\n    })\n\n    /**\n     * 生成 js 文件到目标目录\n     */\n    gulp.task(`${id}-component-js`, done => {\n      const jsFileList = this.componentListMap.jsFileList\n\n      if (jsFileList &&\n        jsFileList.length &&\n        !_.compareArray(this.cachedComponentListMap.jsFileList, jsFileList)) {\n        // js(this.componentListMap.jsFileMap, this)\n      }\n      js(this.componentListMap.jsFileMap, this)\n      return done()\n    })\n    /**\n     * 生成 ts 文件到目标目录\n     */\n    gulp.task(`${id}-component-ts`, done => {\n      const tsFileList = this.componentListMap.tsFileList\n\n      if (tsFileList &&\n        tsFileList.length &&\n        !_.compareArray(this.cachedComponentListMap.tsFileList, tsFileList)) {\n        ts(this.componentListMap.tsFileList, this)\n      }\n\n      return done()\n    })\n\n    /**\n     * 拷贝相关资源到目标目录\n     */\n    gulp.task(`${id}-copy`, gulp.parallel(done => {\n      const copyList = this.copyList\n      const copyFileList = copyList.map(dir => path.join(dir, '**/*.!(wxss)'))\n\n      if (copyFileList.length) return copy(copyFileList)\n\n      return done()\n    }, done => {\n      const copyList = this.copyList\n      const copyFileList = copyList.map(dir => path.join(dir, '**/*.wxss'))\n\n      if (copyFileList.length) return wxss(copyFileList, srcPath, distPath)\n\n      return done()\n    }))\n\n    /**\n     * 拷贝 weui-wxss 到目标目录\n     */\n    gulp.task(`${id}-copy-weui-wxss`, done => {\n      if (config.copyWeuiWxss && Array.isArray(config.copyWeuiWxss)) return copyWeuiWxss()\n      return done ()\n    })\n\n    /**\n     * 监听 json 变化\n     */\n    gulp.task(`${id}-watch-json`, () => gulp.watch(this.componentListMap.jsonFileList, {cwd: srcPath, base: srcPath}, gulp.series(`${id}-component-check`, gulp.parallel(`${id}-component-wxml`, `${id}-component-wxss`, `${id}-component-js`, `${id}-component-json`))))\n\n    /**\n     * 监听 wxml 变化\n     */\n    gulp.task(`${id}-watch-wxml`, () => {\n      this.cachedComponentListMap.wxmlFileList = null\n      return gulp.watch(this.componentListMap.wxmlFileList, {cwd: srcPath, base: srcPath}, gulp.series(`${id}-component-wxml`))\n    })\n\n    /**\n     * 监听 wxss 变化\n     */\n    gulp.task(`${id}-watch-wxss`, () => {\n      this.cachedComponentListMap.wxssFileList = null\n      return gulp.watch('**/*.wxss', {cwd: srcPath, base: srcPath}, gulp.series(`${id}-component-wxss`))\n    })\n    /**\n     * 监听 less 变化\n     */\n    gulp.task(`${id}-watch-less`, () => {\n      this.cachedComponentListMap.lessFileList = null\n      return gulp.watch('**/*.less', {cwd: srcPath, base: srcPath}, gulp.series(`${id}-component-less`))\n    })\n    /**\n     * 监听 ts 变化\n     */\n    gulp.task(`${id}-watch-ts`, () => {\n      this.cachedComponentListMap.tsFileList = null\n      return gulp.watch('**/*.ts', {cwd: srcPath, base: srcPath}, gulp.series(`${id}-component-ts`))\n    })\n\n    /**\n     * 监听相关资源变化\n     */\n    gulp.task(`${id}-watch-copy`, () => {\n      const copyList = this.copyList\n      let copyFileList = copyList.map(dir => path.join(dir, '**/*'))\n      const watchCallback = filePath => copy([filePath])\n\n      // 加上要忽略的列表\n      if (config.copyIgnore) {\n        copyFileList = copyFileList.concat(config.copyIgnore)\n      }\n      return gulp.watch(copyFileList, {cwd: srcPath, base: srcPath})\n        .on('change', watchCallback)\n        .on('add', watchCallback)\n        .on('unlink', watchCallback)\n    })\n\n    /**\n     * 监听 weui-wxss 变化\n     */\n    gulp.task(`${id}-watch-copy-weui-wxss`, () => {\n      const copyWeuiWxssList = config.copyWeuiWxss || []\n      const watchCallback = filePath => copyWeuiWxss([filePath])\n\n      return gulp.watch(copyWeuiWxssList, {cwd: srcPath, base: srcPath})\n        .on('change', watchCallback)\n        .on('add', watchCallback)\n        .on('unlink', watchCallback)\n    })\n\n    /**\n     * 监听 demo 变化\n     */\n    gulp.task(`${id}-watch-demo`, () => {\n      const demoSrc = config.demoSrc\n      const demoDist = config.demoDist\n      const watchCallback = filePath => gulp.src(filePath, {cwd: demoSrc, base: demoSrc})\n        .pipe(gulp.dest(demoDist))\n\n      return gulp.watch('**/*', {cwd: demoSrc, base: demoSrc})\n        .on('change', watchCallback)\n        .on('add', watchCallback)\n        .on('unlink', watchCallback)\n    })\n\n    /**\n     * 监听安装包列表变化\n     */\n    gulp.task(`${id}-watch-install`, () => gulp.watch(path.resolve(__dirname, '../package.json'), install()))\n\n    /**\n     * 构建相关任务\n     */\n    // gulp.task(`${id}-build`, gulp.series(`${id}-clean-dist`, `${id}-component-check`, gulp.parallel(`${id}-component-less`)))\n    gulp.task(`${id}-build`, gulp.series(`${id}-clean-dist`, `${id}-component-check`, gulp.parallel(`${id}-component-wxml`, `${id}-component-js`, `${id}-component-less`, `${id}-component-wxss`, `${id}-component-json`, `${id}-copy`, `${id}-copy-weui-wxss`, `${id}-package-json`)))\n\n    gulp.task(`${id}-watch`, gulp.series(`${id}-build`, `${id}-demo`, `${id}-install`, gulp.parallel(`${id}-watch-wxml`, `${id}-watch-wxss`, `${id}-watch-json`, `${id}-watch-copy`, `${id}-watch-copy-weui-wxss`, `${id}-watch-install`, `${id}-watch-demo`, `${id}-watch-less`, `${id}-watch-ts`)))\n\n    gulp.task(`${id}-dev`, gulp.series(`${id}-build`, `${id}-demo`, `${id}-install`))\n\n    gulp.task(`${id}-default`, gulp.series(`${id}-build`))\n  }\n}\n\nmodule.exports = BuildTask\n"
  },
  {
    "path": "tools/checkcomponents.js",
    "content": "const path = require('path')\n\nconst _ = require('./utils')\nconst config = require('./config')\n\nconst srcPath = config.srcPath\n\n/**\n * 获取 json 路径相关信息\n */\nfunction getJsonPathInfo(jsonPath) {\n  const dirPath = path.dirname(jsonPath)\n  const fileName = path.basename(jsonPath, '.json')\n  const relative = path.relative(srcPath, dirPath)\n  const fileBase = path.join(relative, fileName)\n\n  return {\n    dirPath, fileName, relative, fileBase\n  }\n}\n\n/**\n * 检测是否包含其他自定义组件\n */\nconst checkProps = ['usingComponents', 'componentGenerics']\nasync function checkIncludedComponents(jsonPath, componentListMap) {\n  const json = _.readJson(jsonPath)\n  if (!json) throw new Error(`json is not valid: \"${jsonPath}\"`)\n\n  const {dirPath, fileName, fileBase} = getJsonPathInfo(jsonPath)\n\n  for (let i = 0, len = checkProps.length; i < len; i++) {\n    const checkProp = checkProps[i]\n    const checkPropValue = json[checkProp] || {}\n    const keys = Object.keys(checkPropValue)\n\n    for (let j = 0, jlen = keys.length; j < jlen; j++) {\n      const key = keys[j]\n      let value = typeof checkPropValue[key] === 'object' ? checkPropValue[key].default : checkPropValue[key]\n      if (!value) continue\n\n      value = _.transformPath(value, path.sep)\n\n      // 检查相对路径\n      const componentPath = `${path.join(dirPath, value)}.json`\n      // eslint-disable-next-line no-await-in-loop\n      const isExists = await _.checkFileExists(componentPath)\n      if (isExists) {\n        // eslint-disable-next-line no-await-in-loop\n        await checkIncludedComponents(componentPath, componentListMap)\n      }\n    }\n  }\n\n  // 进入存储\n  let exists = await _.checkFileExists(path.join(dirPath, `${fileName}.wxml`))\n  if (exists) {\n    componentListMap.wxmlFileList.push(`${fileBase}.wxml`)\n  }\n  exists = await _.checkFileExists(path.join(dirPath, `${fileName}.wxss`))\n  exists && componentListMap.wxssFileList.push(`${fileBase}.wxss`)\n  exists = await _.checkFileExists(path.join(dirPath, `${fileName}.less`))\n  exists && componentListMap.lessFileList.push(`${fileBase}.less`)\n  exists = await _.checkFileExists(path.join(dirPath, `${fileName}.json`))\n  exists && componentListMap.jsonFileList.push(`${fileBase}.json`)\n  exists = await _.checkFileExists(path.join(dirPath, `${fileName}.js`))\n  exists && componentListMap.jsFileList.push(`${fileBase}.js`)\n  exists = await _.checkFileExists(path.join(dirPath, `${fileName}.ts`))\n  if (exists && componentListMap.tsFileList.indexOf(`${fileBase}.ts`) < 0) {\n    componentListMap.tsFileList.push(`${fileBase}.ts`)\n  }\n\n  exists = await _.checkFileExists(path.join(dirPath, `${fileName}.js`))\n  exists && (componentListMap.jsFileMap[fileBase] = `${path.join(dirPath, fileName)}.js`)\n  exists = await _.checkFileExists(path.join(dirPath, `${fileName}.ts`))\n  exists && (componentListMap.jsFileMap[fileBase] = `${path.join(dirPath, fileName)}.ts`)\n}\n\nmodule.exports = async function (entry) {\n  const componentListMap = {\n    wxmlFileList: [],\n    wxssFileList: [],\n    lessFileList: [],\n    jsonFileList: [],\n    jsFileList: [],\n    tsFileList: [],\n\n    jsFileMap: {}, // 为 webpack entry 所用\n  }\n\n  const isExists = await _.checkFileExists(entry)\n  if (!isExists) {\n    const {dirPath, fileName, fileBase} = getJsonPathInfo(entry)\n\n    componentListMap.jsFileList.push(`${fileBase}.js`)\n    componentListMap.jsFileMap[fileBase] = `${path.join(dirPath, fileName)}.js`\n\n    return componentListMap\n  }\n\n  await checkIncludedComponents(entry, componentListMap)\n\n  return componentListMap\n}\n"
  },
  {
    "path": "tools/checkwxss.js",
    "content": "const path = require('path')\nconst through = require('through2')\nconst Vinyl = require('vinyl')\n\nconst _ = require('./utils')\n\n/**\n * 获取 import 列表\n */\nfunction getImportList(wxss, filePath) {\n  const reg = /@import\\s+(?:(?:\"([^\"]+)\")|(?:'([^\"]+)'));/ig\n  const importList = []\n  let execRes = reg.exec(wxss)\n\n  while (execRes && (execRes[1] || execRes[2])) {\n    importList.push({\n      code: execRes[0],\n      path: path.join(path.dirname(filePath), execRes[1] || execRes[2]),\n    })\n    execRes = reg.exec(wxss)\n  }\n\n  return importList\n}\nconst importFileMap = {}\n/**\n * 获取 wxss 内容\n */\nasync function getContent(wxss, filePath, cwd) {\n  let importList = []\n  // if (importFileMap[filePath]) {\n  //   return false\n  // }\n  // importFileMap[filePath] = true\n  if (wxss) {\n    const currentImportList = getImportList(wxss, filePath)\n    \n    for (const item of currentImportList) {\n      // 替换掉 import 语句，不让 less 编译\n      wxss = wxss.replace(item.code, `/* *updated for miniprogram-custom-component* ${item.code} */`)\n\n      // 处理依赖的 wxss\n      // const importWxss = await _.readFile(item.path)\n      // // 这里要处理循环依赖的情况\n      // const importInfo = await getContent(importWxss, item.path, cwd)\n      // // 如果已经处理过了，这里不需要再加入了，否则出现循环引用的情况\n      // // if (!importInfo) continue\n      // // 获取依赖列表\n      // importList.push(new Vinyl({\n      //   cwd,\n      //   path: item.path,\n      //   contents: Buffer.from(importInfo.wxss, 'utf8'),\n      // }))\n      // importList = importList.concat(importInfo.importList)\n    }\n  }\n\n  return {\n    wxss,\n    importList,\n  }\n}\n\nmodule.exports = {\n  start() {\n    return through.obj(function (file, enc, cb) {\n      if (file.isBuffer()) {\n        getContent(file.contents.toString('utf8'), file.path, file.cwd).then(res => {\n          const { wxss, importList } = res\n\n          importList.forEach(importFile => this.push(importFile))\n\n          file.contents = Buffer.from(wxss, 'utf8')\n          this.push(file)\n          cb()\n        }).catch(err => {\n          // eslint-disable-next-line no-console\n          \n          console.warn(`deal with ${file.path} failed: ${err.stack}`)\n          this.push(file)\n          cb()\n        })\n      } else {\n        this.push(file)\n        cb()\n      }\n    })\n  },\n\n  end() {\n    return through.obj(function (file, enc, cb) {\n      if (file.isBuffer) {\n        const reg = /\\/\\*\\s\\*updated for miniprogram-custom-component\\*\\s(@import\\s+(?:(?:\"([^\"]+)\")|(?:'([^\"]+)'));)\\s\\*\\//ig\n        const wxss = file.contents.toString('utf8').replace(reg, (all, $1) => {\n          // 把.less改成.wxss\n          console.log('wxssreplace $1 is', $1, $1.replace('.less', '.wxss').replace('weui-wxss/src', 'weui-wxss/dist'))\n          return $1.replace('.less', '.wxss').replace('weui-wxss/src', 'weui-wxss/dist')\n        })\n\n        file.contents = Buffer.from(wxss, 'utf8')\n        this.push(file)\n        cb()\n      } else {\n        this.push(file)\n        cb()\n      }\n    })\n  },\n}\n"
  },
  {
    "path": "tools/config.js",
    "content": "const path = require('path')\n\nconst webpack = require('webpack')\nconst nodeExternals = require('webpack-node-externals')\n\nconst isDev = process.argv.indexOf('--develop') >= 0\nconst isWatch = process.argv.indexOf('--watch') >= 0\nconst demoSrc = path.resolve(__dirname, './demo')\nconst demoDist = path.resolve(__dirname, '../miniprogram_dev')\nconst src = path.resolve(__dirname, '../src')\nconst dev = path.join(demoDist, 'components')\nconst dist = path.resolve(__dirname, '../miniprogram_dist')\n\nmodule.exports = {\n  entry: ['index'],\n\n  isDev,\n  isWatch,\n  srcPath: src, // 源目录\n  distPath: isDev ? dev : dist, // 目标目录\n\n  demoSrc, // demo 源目录\n  demoDist, // demo 目标目录\n\n  wxss: {\n    less: true, // 使用 less 来编写 wxss\n    sourcemap: false, // 生成 less sourcemap\n  },\n\n  webpack: {\n    mode: 'production',\n    output: {\n      filename: '[name].js',\n      libraryTarget: 'commonjs2',\n    },\n    target: 'node',\n    externals: [nodeExternals()], // 忽略 node_modules\n    module: {\n      rules: [{\n        test: /\\.js|\\.ts$/i,\n        use: [\n          'babel-loader',\n          'eslint-loader'\n        ],\n        exclude: /node_modules/\n      }],\n    },\n    resolve: {\n      modules: [src, 'node_modules'],\n      extensions: ['.ts', '.js', '.json'],\n    },\n    plugins: [\n      new webpack.DefinePlugin({}),\n      new webpack.optimize.LimitChunkCountPlugin({maxChunks: 1}),\n    ],\n    optimization: {\n      minimize: false,\n    },\n    // devtool: 'nosources-source-map', // 生成 js sourcemap\n    performance: {\n      hints: 'warning',\n      assetFilter: assetFilename => assetFilename.endsWith('.js')\n    }\n  },\n  ignore: ['!./weui-wxss/**/*'], // 要忽略的目录/文件\n  copyIgnore: ['!./weui-wxss/**/*'], // 要忽略的目录/文件\n  copy: {\n    src: ['./static/**/*', './**/*.wxss', './**/*.wxs', ]\n  }, // 将会复制到目标目录\n  copyWeuiWxss: ['./weui-wxss/dist/style/weui.wxss', './weui-wxss/dist/style/icon/weui-icon.wxss']\n}\n"
  },
  {
    "path": "tools/package.json",
    "content": "{}"
  },
  {
    "path": "tools/utils.js",
    "content": "const fs = require('fs')\nconst path = require('path')\n\n// eslint-disable-next-line no-unused-vars\nconst colors = require('colors')\nconst through = require('through2')\n\n/**\n * 异步函数封装\n */\nfunction wrap(func, scope) {\n  return function (...args) {\n    if (args.length) {\n      const temp = args.pop()\n      if (typeof temp !== 'function') {\n        args.push(temp)\n      }\n    }\n\n    return new Promise(function (resolve, reject) {\n      args.push(function (err, data) {\n        if (err) reject(err)\n        else resolve(data)\n      })\n\n      func.apply((scope || null), args)\n    })\n  }\n}\n\nconst accessSync = wrap(fs.access)\nconst statSync = wrap(fs.stat)\nconst renameSync = wrap(fs.rename)\nconst mkdirSync = wrap(fs.mkdir)\nconst readFileSync = wrap(fs.readFile)\nconst writeFileSync = wrap(fs.writeFile)\n\n/**\n * 调整路径分隔符\n */\nfunction transformPath(filePath, sep = '/') {\n  return filePath.replace(/[\\\\/]/g, sep)\n}\n\n/**\n * 检查文件是否存在\n */\nasync function checkFileExists(filePath) {\n  try {\n    await accessSync(filePath)\n    return true\n  } catch (err) {\n    return false\n  }\n}\n\n/**\n * 递归创建目录\n */\nasync function recursiveMkdir(dirPath) {\n  const prevDirPath = path.dirname(dirPath)\n  try {\n    await accessSync(prevDirPath)\n  } catch (err) {\n    // 上一级目录不存在\n    await recursiveMkdir(prevDirPath)\n  }\n\n  try {\n    await accessSync(dirPath)\n\n    const stat = await statSync(dirPath)\n    if (stat && !stat.isDirectory()) {\n      // 目标路径存在，但不是目录\n      await renameSync(dirPath, `${dirPath}.bak`) // 将此文件重命名为 .bak 后缀\n      await mkdirSync(dirPath)\n    }\n  } catch (err) {\n    // 目标路径不存在\n    await mkdirSync(dirPath)\n  }\n}\n\n/**\n * 读取 json\n */\nfunction readJson(filePath) {\n  try {\n    // eslint-disable-next-line import/no-dynamic-require\n    const content = require(filePath)\n    delete require.cache[require.resolve(filePath)]\n    return content\n  } catch (err) {\n    return null\n  }\n}\n\n/**\n * 读取文件\n */\nasync function readFile(filePath) {\n  try {\n    return await readFileSync(filePath, 'utf8')\n  } catch (err) {\n    // eslint-disable-next-line no-console\n    return console.error(err)\n  }\n}\n\n/**\n * 写文件\n */\nasync function writeFile(filePath, data) {\n  try {\n    await recursiveMkdir(path.dirname(filePath))\n    return await writeFileSync(filePath, data, 'utf8')\n  } catch (err) {\n    // eslint-disable-next-line no-console\n    return console.error(err)\n  }\n}\n\n/**\n * 时间格式化\n */\nfunction format(time, reg) {\n  const date = typeof time === 'string' ? new Date(time) : time\n  const map = {}\n  map.yyyy = date.getFullYear()\n  map.yy = ('' + map.yyyy).substr(2)\n  map.M = date.getMonth() + 1\n  map.MM = (map.M < 10 ? '0' : '') + map.M\n  map.d = date.getDate()\n  map.dd = (map.d < 10 ? '0' : '') + map.d\n  map.H = date.getHours()\n  map.HH = (map.H < 10 ? '0' : '') + map.H\n  map.m = date.getMinutes()\n  map.mm = (map.m < 10 ? '0' : '') + map.m\n  map.s = date.getSeconds()\n  map.ss = (map.s < 10 ? '0' : '') + map.s\n\n  return reg.replace(/\\byyyy|yy|MM|M|dd|d|HH|H|mm|m|ss|s\\b/g, $1 => map[$1])\n}\n\n/**\n * 日志插件\n */\nfunction logger(action = 'copy') {\n  return through.obj(function (file, enc, cb) {\n    const type = path.extname(file.path).slice(1).toLowerCase()\n\n    // eslint-disable-next-line no-console\n    console.log(`[${format(new Date(), 'yyyy-MM-dd HH:mm:ss').grey}] [${action.green} ${type.green}] ${'=>'.cyan} ${file.path}`)\n\n    this.push(file)\n    cb()\n  })\n}\n\n/**\n * 比较数组是否相等\n */\nfunction compareArray(arr1, arr2) {\n  if (!Array.isArray(arr1) || !Array.isArray(arr2)) return false\n  if (arr1.length !== arr2.length) return false\n\n  for (let i = 0, len = arr1.length; i < len; i++) {\n    if (arr1[i] !== arr2[i]) return false\n  }\n\n  return true\n}\n\n/**\n * 合并两个对象\n */\nfunction merge(obj1, obj2) {\n  Object.keys(obj2).forEach(key => {\n    if (Array.isArray(obj1[key]) && Array.isArray(obj2[key])) {\n      obj1[key] = obj1[key].concat(obj2[key])\n    } else if (typeof obj1[key] === 'object' && typeof obj2[key] === 'object') {\n      obj1[key] = Object.assign(obj1[key], obj2[key])\n    } else {\n      obj1[key] = obj2[key]\n    }\n  })\n\n  return obj1\n}\n\n/**\n * 获取 id\n */\nlet seed = +new Date()\nfunction getId() {\n  return ++seed\n}\n\n/**\n * weui-wxss 处理插件\n */\nfunction dealWithWeuiWxss() {\n  return through.obj(function (file, enc, cb) {\n    if (path.extname(file.path) === '.wxss') {\n      // 修改 wxss 文件，移除 :active 相关代码\n      const result = file.contents.toString().replace(/:active/g, '.weui-active')\n      file.contents = Buffer.from(result)\n    }\n\n    const action = 'copy'\n    const type = path.extname(file.path).slice(1).toLowerCase()\n\n    // eslint-disable-next-line no-console\n    console.log(`[${format(new Date(), 'yyyy-MM-dd HH:mm:ss').grey}] [${action.green} ${type.green}] ${'=>'.cyan} ${file.path}`)\n\n    this.push(file)\n    cb()\n  })\n}\n\nmodule.exports = {\n  wrap,\n  transformPath,\n\n  checkFileExists,\n  readJson,\n  readFile,\n  writeFile,\n\n  logger,\n  format,\n  compareArray,\n  merge,\n  getId,\n  dealWithWeuiWxss,\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n    \"compilerOptions\": {\n        \"baseUrl\": \".\",\n        \"module\": \"commonjs\",\n        \"noImplicitAny\": false,\n        \"removeComments\": true,\n        \"target\": \"es2017\",\n        \"lib\": [\"ES6\", \"ES7\", \"dom\"],\n        \"preserveConstEnums\": true,\n        \"sourceMap\": true,\n        \"allowSyntheticDefaultImports\": true\n    },\n    \"include\": [\"src/**/*.ts\", \"node_modules/miniprogram-api-typings/index.d.ts\"]\n}"
  }
]