Full Code of win-winFE/dms for AI

master 92cff6088759 cached
330 files
3.7 MB
999.4k tokens
3910 symbols
1 requests
Download .txt
Showing preview only (4,016K chars total). Download the full file or copy to clipboard to get everything.
Repository: win-winFE/dms
Branch: master
Commit: 92cff6088759
Files: 330
Total size: 3.7 MB

Directory structure:
gitextract_m6r3lqby/

├── .babelrc.js
├── .config.js
├── .gitignore
├── .webpackrc.js
├── LICENSE
├── README.md
├── app/
│   ├── assets/
│   │   ├── common/
│   │   │   ├── menu.js
│   │   │   └── router.js
│   │   ├── components/
│   │   │   ├── ActiveChart/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── Authorized/
│   │   │   │   ├── Authorized.js
│   │   │   │   ├── AuthorizedRoute.js
│   │   │   │   ├── CheckPermissions.js
│   │   │   │   ├── CheckPermissions.test.js
│   │   │   │   ├── PromiseRender.js
│   │   │   │   ├── Secured.js
│   │   │   │   ├── demo/
│   │   │   │   │   ├── AuthorizedArray.md
│   │   │   │   │   ├── AuthorizedFunction.md
│   │   │   │   │   ├── basic.md
│   │   │   │   │   └── secured.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   └── index.md
│   │   │   ├── AvatarList/
│   │   │   │   ├── AvatarItem.d.ts
│   │   │   │   ├── demo/
│   │   │   │   │   └── simple.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── Charts/
│   │   │   │   ├── Bar/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   └── index.js
│   │   │   │   ├── ChartCard/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── Field/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── Gauge/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   └── index.js
│   │   │   │   ├── MiniArea/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   └── index.js
│   │   │   │   ├── MiniBar/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   └── index.js
│   │   │   │   ├── MiniProgress/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── Pie/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── Radar/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── TagCloud/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── TimelineChart/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── WaterWave/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── autoHeight.js
│   │   │   │   ├── demo/
│   │   │   │   │   ├── bar.md
│   │   │   │   │   ├── chart-card.md
│   │   │   │   │   ├── gauge.md
│   │   │   │   │   ├── mini-area.md
│   │   │   │   │   ├── mini-bar.md
│   │   │   │   │   ├── mini-pie.md
│   │   │   │   │   ├── mini-progress.md
│   │   │   │   │   ├── mix.md
│   │   │   │   │   ├── pie.md
│   │   │   │   │   ├── radar.md
│   │   │   │   │   ├── tag-cloud.md
│   │   │   │   │   ├── timeline-chart.md
│   │   │   │   │   └── waterwave.md
│   │   │   │   ├── g2.js
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── CountDown/
│   │   │   │   ├── demo/
│   │   │   │   │   └── simple.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── DescriptionList/
│   │   │   │   ├── Description.d.ts
│   │   │   │   ├── Description.js
│   │   │   │   ├── DescriptionList.js
│   │   │   │   ├── demo/
│   │   │   │   │   ├── basic.md
│   │   │   │   │   └── vertical.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   ├── index.zh-CN.md
│   │   │   │   └── responsive.js
│   │   │   ├── EditableItem/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── EditableLinkGroup/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── Ellipsis/
│   │   │   │   ├── demo/
│   │   │   │   │   ├── line.md
│   │   │   │   │   └── number.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── Exception/
│   │   │   │   ├── demo/
│   │   │   │   │   ├── 403.md
│   │   │   │   │   ├── 404.md
│   │   │   │   │   └── 500.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   ├── index.zh-CN.md
│   │   │   │   └── typeConfig.js
│   │   │   ├── FooterToolbar/
│   │   │   │   ├── demo/
│   │   │   │   │   └── basic.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── GlobalFooter/
│   │   │   │   ├── demo/
│   │   │   │   │   └── basic.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── GlobalHeader/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── HeaderSearch/
│   │   │   │   ├── demo/
│   │   │   │   │   └── basic.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── JsonSchemaForm/
│   │   │   │   ├── components/
│   │   │   │   │   ├── AddButton.js
│   │   │   │   │   ├── ErrorList.js
│   │   │   │   │   ├── Form.js
│   │   │   │   │   ├── IconButton.js
│   │   │   │   │   ├── fields/
│   │   │   │   │   │   ├── ArrayField.js
│   │   │   │   │   │   ├── BooleanField.js
│   │   │   │   │   │   ├── DescriptionField.js
│   │   │   │   │   │   ├── MultiSchemaField.js
│   │   │   │   │   │   ├── NumberField.js
│   │   │   │   │   │   ├── ObjectField.js
│   │   │   │   │   │   ├── SchemaField.js
│   │   │   │   │   │   ├── StringField.js
│   │   │   │   │   │   ├── TitleField.js
│   │   │   │   │   │   ├── UnsupportedField.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── widgets/
│   │   │   │   │       ├── AltDateTimeWidget.js
│   │   │   │   │       ├── AltDateWidget.js
│   │   │   │   │       ├── BaseInput.js
│   │   │   │   │       ├── CheckboxWidget.js
│   │   │   │   │       ├── CheckboxesWidget.js
│   │   │   │   │       ├── ColorWidget.js
│   │   │   │   │       ├── DateTimeWidget.js
│   │   │   │   │       ├── DateWidget.js
│   │   │   │   │       ├── EmailWidget.js
│   │   │   │   │       ├── FileWidget.js
│   │   │   │   │       ├── HiddenWidget.js
│   │   │   │   │       ├── PasswordWidget.js
│   │   │   │   │       ├── RadioWidget.js
│   │   │   │   │       ├── RangeWidget.js
│   │   │   │   │       ├── SelectWidget.js
│   │   │   │   │       ├── TextWidget.js
│   │   │   │   │       ├── TextareaWidget.js
│   │   │   │   │       ├── URLWidget.js
│   │   │   │   │       ├── UpDownWidget.js
│   │   │   │   │       └── index.js
│   │   │   │   ├── constants.js
│   │   │   │   ├── index.js
│   │   │   │   ├── types.js
│   │   │   │   ├── utils.js
│   │   │   │   └── validate.js
│   │   │   ├── Login/
│   │   │   │   ├── LoginItem.js
│   │   │   │   ├── LoginSubmit.js
│   │   │   │   ├── LoginTab.js
│   │   │   │   ├── demo/
│   │   │   │   │   └── basic.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   ├── index.zh-CN.md
│   │   │   │   └── map.js
│   │   │   ├── NoticeIcon/
│   │   │   │   ├── NoticeIconTab.d.ts
│   │   │   │   ├── NoticeList.js
│   │   │   │   ├── NoticeList.less
│   │   │   │   ├── demo/
│   │   │   │   │   ├── basic.md
│   │   │   │   │   └── popover.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── NumberInfo/
│   │   │   │   ├── demo/
│   │   │   │   │   └── basic.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── PageHeader/
│   │   │   │   ├── demo/
│   │   │   │   │   ├── image.md
│   │   │   │   │   ├── simple.md
│   │   │   │   │   ├── standard.md
│   │   │   │   │   └── structure.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   ├── index.md
│   │   │   │   └── index.test.js
│   │   │   ├── Result/
│   │   │   │   ├── demo/
│   │   │   │   │   ├── classic.md
│   │   │   │   │   ├── error.md
│   │   │   │   │   └── structure.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── SiderMenu/
│   │   │   │   ├── SiderMenu.js
│   │   │   │   ├── SilderMenu.test.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── StandardFormRow/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── StandardTable/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── TagSelect/
│   │   │   │   ├── TagSelectOption.d.ts
│   │   │   │   ├── demo/
│   │   │   │   │   ├── expandable.md
│   │   │   │   │   └── simple.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── Trend/
│   │   │   │   ├── demo/
│   │   │   │   │   ├── basic.md
│   │   │   │   │   └── reverse.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   └── _utils/
│   │   │       ├── pathTools.js
│   │   │       └── pathTools.test.js
│   │   ├── custom/
│   │   │   └── components/
│   │   │       └── Editor.js
│   │   ├── e2e/
│   │   │   ├── home.e2e.js
│   │   │   └── login.e2e.js
│   │   ├── index.ejs
│   │   ├── index.js
│   │   ├── index.less
│   │   ├── layouts/
│   │   │   ├── BasicLayout.js
│   │   │   ├── BlankLayout.js
│   │   │   ├── PageHeaderLayout.js
│   │   │   ├── PageHeaderLayout.less
│   │   │   ├── UserLayout.js
│   │   │   └── UserLayout.less
│   │   ├── models/
│   │   │   ├── error.js
│   │   │   ├── global.js
│   │   │   ├── index.js
│   │   │   ├── login.js
│   │   │   ├── register.js
│   │   │   └── user.js
│   │   ├── rollbar.js
│   │   ├── router.js
│   │   ├── routes/
│   │   │   ├── Development/
│   │   │   │   ├── App.js
│   │   │   │   ├── App.less
│   │   │   │   ├── Module.js
│   │   │   │   ├── Module.less
│   │   │   │   ├── Param.js
│   │   │   │   ├── Param.less
│   │   │   │   ├── Schema.js
│   │   │   │   └── Schema.less
│   │   │   ├── Exception/
│   │   │   │   ├── 403.js
│   │   │   │   ├── 404.js
│   │   │   │   ├── 500.js
│   │   │   │   ├── style.less
│   │   │   │   └── triggerException.js
│   │   │   ├── Operations/
│   │   │   │   ├── App.js
│   │   │   │   ├── App.less
│   │   │   │   ├── Data.js
│   │   │   │   ├── Data.less
│   │   │   │   ├── Module.js
│   │   │   │   └── Module.less
│   │   │   ├── Result/
│   │   │   │   ├── Error.js
│   │   │   │   ├── Success.js
│   │   │   │   └── Success.test.js
│   │   │   └── User/
│   │   │       ├── Login.js
│   │   │       ├── Login.less
│   │   │       ├── Register.js
│   │   │       ├── Register.less
│   │   │       ├── RegisterResult.js
│   │   │       └── RegisterResult.less
│   │   ├── services/
│   │   │   ├── api.js
│   │   │   ├── error.js
│   │   │   └── user.js
│   │   ├── theme.js
│   │   └── utils/
│   │       ├── Authorized.js
│   │       ├── authority.js
│   │       ├── ca.js
│   │       ├── constants.js
│   │       ├── fetch.js
│   │       ├── request.js
│   │       ├── url.js
│   │       ├── utils.js
│   │       └── utils.less
│   ├── controller/
│   │   ├── application.js
│   │   ├── auth.js
│   │   ├── data.js
│   │   ├── home.js
│   │   ├── module.js
│   │   ├── param.js
│   │   ├── put.js
│   │   └── user.js
│   ├── lib/
│   │   └── AliOSS.js
│   ├── middleware/
│   │   └── auth.js
│   ├── model/
│   │   ├── application.js
│   │   ├── auth.js
│   │   ├── data.js
│   │   ├── module.js
│   │   ├── param.js
│   │   └── user.js
│   ├── public/
│   │   ├── index.3e1a724e.css
│   │   ├── index.3eaede4e.js
│   │   └── index.html
│   ├── router.js
│   └── util/
│       ├── common.js
│       ├── response.js
│       └── utils.js
├── config/
│   ├── config.default.js
│   ├── manifest.json
│   └── plugin.js
├── database/
│   ├── dms.sql
│   └── init.sql
├── package.json
└── webpack.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .babelrc.js
================================================
const path = require('path');

module.exports = {
  plugins: [
    [
      'module-resolver',
      {
        alias: {
          components: path.join(__dirname, './src/components'),
        },
      },
    ],
    [
      'import',
      {
        libraryName: 'antd',
        style: true, // or 'css'
      },
    ],
  ],
};


================================================
FILE: .config.js
================================================
module.exports = {
  jwtSecret: 'winwinfe', // jwt加密key
  dmsUploadAPI: 'http://127.0.0.1:7100/api', // dms上传服务访问地址,项目地址:https://github.com/gavin1995/dms-upload
  useCloud: 'OSS', // OSS、AZURE、false
  useServerLess: false, // ALI_CLOUD、AMAZON(暂不支持)、false
  cdnPrefix: 'https://dms.oss-cn-hangzhou.aliyuncs.com/', // TODO: 请重新配置cdn前缀
  // mysql配置 TODO: 请修改
  sequelize: {
    dialect: 'mysql',
    database: 'dms',
    host: '127.0.0.1',
    port: '3306',
    username: 'root',
    password:'root1234',
    timezone: '+08:00'
  },
  // 文件上传配置
  multipart: {
    autoFields: false,
    defaultCharset: 'utf8',
    fieldNameSize: 100,
    fieldSize: '100kb',
    fields: 10,
    fileSize: '10mb',
    files: 10,
    fileExtensions: [],
    whitelist: null,
  },
  // redis配置
  redis: {
    client: {
      port: 6379,
      host: '127.0.0.1',
      password: null,
      db: 0
    }
  },
  // 生产环境日志配置
  log: {
    dir: '/opt/logs/nodejs'
  },
  // 阿里云相关配置 TODO: 请修改
  aliCloud: {
    ossRegion: 'oss-cn-hangzhou',
    ossBucket: 'dms',
    assessKeyId: 'assessKeyId',
    secretAccessKey: 'secretAccessKey',
    ossStaticUrl: 'https://dms.oss-cn-hangzhou.aliyuncs.com', // OSS访问地址前缀
  }
};


================================================
FILE: .gitignore
================================================
node_modules
.idea
logs
yarn-*.log
.DS_Store
CODE_OF_CONDUCT.md
opt/
run/
dist/
config.js


================================================
FILE: .webpackrc.js
================================================
const path = require('path');

export default {
  entry: 'app/assets/index.js',
  extraBabelPlugins: [['import', { libraryName: 'antd', libraryDirectory: 'es', style: true }]],
  env: {
    development: {
      extraBabelPlugins: ['dva-hmr'],
    },
  },
  alias: {
    components: path.resolve(__dirname, './app/assets//components/'),
  },
  outputPath: path.resolve(__dirname, './app/public/'),
  ignoreMomentLocale: true,
  theme: './app/assets//theme.js',
  html: {
    template: './app/assets/index.ejs',
  },
  es5ImcompatibleVersions: true,
  disableDynamicImport: true,
  publicPath: 'app/public',
  hash: true,
  manifest: {
    fileName: path.resolve(__dirname, './config/manifest.json')
  }
};


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2019 gavin1995

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
DMS正在进行发布以来最大的一次更新,敬请期待...  - Gavin 2021.10.18

<img src="https://github.com/gavin1995/dms/blob/master/app/assets/assets/logo.png" width="480px" />

![](https://github.com/gavin1995/dms/blob/master/app/public/assets/images/use.gif)


[![issue](https://img.shields.io/github/issues/gavin1995/dms.svg)](https://github.com/gavin1995/dms)
[![license](https://img.shields.io/github/license/gavin1995/dms.svg)](https://github.com/gavin1995/dms)

## 动态数据管理神器-DMS

### 重构中,敬请期待...

### 介绍

#### 什么是DMS?

基于Json Schema/UI Schema`模块化`的Json动态数据管理平台。

#### 什么是Json Schema/UI Schema?

* 用于动态生成表单的Schema,参考 [Json Schema使用案例](https://mozilla-services.github.io/react-jsonschema-form/)
* [官方文档](https://json-schema.org/understanding-json-schema/index.html)

#### 使用场景有哪些?

无论前端、后端、移动端、运维,理论上所有需要动态配置数据的场景都可以使用。

针对前端、移动端:可以配置页面每个模块展示型数据,也可以配置各种版本号用于动态更新,各种功能开关、页面主题等。

针对后端:可以配置业务相关的ID,配置类目,城市列表,热门等。

针对运维:可以作为区分环境的配置中心等。

当然使用场景远不止这些......

#### 可以运用到生产环境吗?

当然可以,DMS存储的数据读写是完全分开的,目前支持通过Redis(使用redis获取数据方式请参考[注意](https://github.com/gavin1995/dms#%E6%B3%A8%E6%84%8F))、CDN(推荐)两种获取数据方式。即使DMS自身服务器挂掉,也不会影响数据的读取。强烈推荐使用CDN的方式,这样稳定性和使用的CDN是一样的。

#### DMS应用、模块、参数介绍

* 应用:包含一个或多个模块,包含一个或多个参数
* 模块:配置数据的最小单位
* 参数:使模块根据不同参数配置不同数据(如:每个城市展示的频道页不一样)

![](https://github.com/gavin1995/dms/blob/master/app/public/assets/images/tb.png)

#### DMS特性

* 实时表单预览;
* 模块化(组件化)数据管理;
* 支持表单数据逻辑判断、数据验证;
* Schema数据自动保存(默认关闭),防止误操作及未知异常;
* 支持动态增加参数,参数本身也可以为DMS生成的配置数据;
* 配合[dms-upload](https://github.com/gavin1995/dms-upload)可以快速将通过表单上传的文件传入CDN/云存储
* 符合实际场景的权限控制:开发只负责schema编写,需求方配置所有数据;
* 支持Schema生成所有基本表单类型及高级控件,如:日期选择器、进度条、密码框、颜色选择器等;
* 实时数据预览/审核(配合[dms-fetch](https://github.com/gavin1995/dms-fetch),同时支持服务端代理请求,及浏览器端请求的数据预览与审核)
* 支持anyOf
* 实时错误提示,错误提示支持中文
* 运营/产品权限区分
* 统一表单图片上传管理
* 应用、模块、参数、权限管理
* 使用Redis缓存数据(需配合使用:[dms-api](https://github.com/gavin1995/dms-api))
* Json Schema/UI Schema在线编辑及生成表单预览
* 使用表单编辑动态数据及实时数据审核(配合使用[dms-fetch](https://github.com/gavin1995/dms-fetch))
* 使用CDN缓存数据,目前已支持Azure CDN(配合使用[dms-upload](https://github.com/gavin1995/dms-upload))


#### TODO

- [ ] 示例项目
- [ ] [阿里云Serverless](https://serverless.aliyun.com/)支持及数据二次加工

#### 需求池

- [ ] 样式优化
- [ ] [Formily](https://github.com/alibaba/formily)接入
- [ ] webassembly前端加密
- [ ] 在线Demo
- [ ] 初始化命令行交互配置

#### 最近三月完成功能

- [x] [阿里云OSS](https://cn.aliyun.com/product/oss)支持 - **2020.04.10**

### 快速开始

**请先确保已经安装好:nodejs8+、mysql、redis,并已开启相关服务**

**安装DMS**

```bash
> git clone https://github.com/gavin1995/dms.git
> yarn # 若没有yarn,请使用 npm install
```

**创建日志目录**

```bash
> mkdir /opt/logs/nodejs -p
```

**按需修改配置**

* 将项目根目录下的`.config.js`改名为`config.js`
* 对`config.js`按需进行配置修改

**执行初始化sql**

* 使用mysql执行 dms/database/dms.sql

**启动/停止/调试**

启动端口默认为:7101,需要修改请修改dms/package.json文件start部分的7101

```bash
> yarn start # 启动,若没有yarn,请使用 npm run start
> yarn stop # 停止, npm run stop
> yarn dev # 调试,npm run dev
```

**注册**

进入:`http://localhost:7101`

将自动跳转到登录页,选择【注册】,按要求填写相关数据,注册成功将自动跳转到【应用管理】页面

**新建示例应用**

点击【新建应用】,新建如下应用

![](https://github.com/gavin1995/dms/blob/master/app/public/assets/images/create-app-modal.png)

**新建示例模块**

点击“淘宝首页”的【模块列表】,点击【新建模块】

![](https://github.com/gavin1995/dms/blob/master/app/public/assets/images/create-module-modal.png)

**编写该模块Schema**

点击“首页banner”的【编辑Schema定义】,复制如下Schema到【Schema定义】中并【保存Schema】

```json
{
  "title": "示例",
  "description": "视频/图片展示配置示例",
  "type": "array",
  "minItems": 3,
  "items": {
    "type": "object",
    "properties": {
      "url": {
        "title": "跳转链接",
        "type": "string"
      },
      "imgs": {
        "title": "轮播图片",
        "type": "string",
        "format": "file"
      }
    } 
  }
}
```

**添加一个参数**

进入【参数列表】,添加如下参数

![](https://github.com/gavin1995/dms/blob/master/app/public/assets/images/create-params.png)

【编辑参数】,【提交】如下参数

![](https://github.com/gavin1995/dms/blob/master/app/public/assets/images/edit-params.png)

**编辑数据**

点击左侧菜单,进入【数据管理】,进入“淘宝首页”应用的【模块列表】,选择城市后点击【进入】,再选择“首页banner”的【编辑模块数据】,此时还不能上传图片、保存数据,需要启用[dms-upload](https://github.com/gavin1995/dms-upload)

**启动dms-upload**

```bash
> git clone https://github.com/gavin1995/dms-upload.git
> yarn # npm install
```

**执行初始化sql**

* 使用mysql执行 dms-upload/database/dms-upload.sql
* 使用mysql执行 dms-upload/database/init.sql(用于上传时的权限验证,默认:root root1234)
* 修改项目中mysql/redis相关配置dms/config/config.default.js(mysql默认密码为:root1234)

**配置dms-upload**

* 启动端口(默认7100):dms-upload/package.json start部分,若修改端口。请修改 dms/app/util/constants.js dmsUploadAPI 中的请求地址前缀
* 数据库配置:dms-upload/config/config.defult.js
* CDN文件保存目录(默认/usr/local/services/cdn/dms):dms-upload/config/config.defult.js cdnDir
* CDN文件访问地址前缀(默认//127.0.0.1:5000/dms):dms-upload/config/config.defult.js cdnPrefix 

**新建CDN文件(图片、json数据)保存目录**

```bash
> mkdir /usr/local/services/cdn/dms/data -p # 若未使用默认cdnDir,请修改data前面部分
> mkdir /usr/local/services/cdn/dms/res -p # 若未使用默认cdnDir,请修改res前面部分
```

**启动dms-upload**

```bash
> yarn start # npm run start
```

**本地调试上传图片回显**

```bash
> cd /usr/local/services/cdn
> python -m SimpleHTTPServer 5000 # python3 请使用: python3 -m http.server 5000
```

**继续回到DMS平台编辑数据**

提交下列数据

![](https://github.com/gavin1995/dms/blob/master/app/public/assets/images/edit-data.png)

#### 直接访问数据(用于非js使用场景)

**临时数据:提交后复制成功Toast中的链接,可以直接访问临时数据数据**

![](https://github.com/gavin1995/dms/blob/master/app/public/assets/images/toast.png)

**正式数据:将临时数据审核为正式数据,也可以通过Toast中的链接直接访问正式数据**

![](https://github.com/gavin1995/dms/blob/master/app/public/assets/images/module-list.png)

#### 使用dms-fetch访问数据(用于js使用场景)

1.项目中安装dms-fetch(不建议,强依赖axios,说明见QA)

```bash
> yarn add dms-fetch # npm install dms-fetch --save
```

2.带参数使用示例(伪代码)

```js
import { getDMSDataByCDN } from 'dms-fetch';
import ...

// 复制编辑数据页面的唯一标示,下面是React应用配合使用DMS参数的示例
export default class extends React.Component {
    ...
    fetchData = async () => {
        const { city } = getParams(this.props.location.search);
        const dmsData = await getDMSDataByCDN(`/7/10/city/${city}`, this.props.location.search);
        this.setState({
            dmsData,
        });
    };
    ...
    render() {
       ...
    }
}
```

### 高级

#### 配置应用参数

* 在参数列表新建参数
* 编辑参数:
    1. 可以使用返回结果为 `key value 形式的对象数组` 的api生成下拉列表,配置接口地址后,请选择【使用接口地址生成参数】
    2. 可以使用手动配置 `key value 形式的对象数组` ,点击+号手动添加下拉菜单项,最后选择【提交】

* 参数可以配合审核地址使用(审核地址里面使用大括号{}包装参数将自动解析,动态生成审核地址)
* 使用DMS自身生成参数列表示例Schema(城市参数为例):

    ```json
    {
      "title": "编辑城市值",
      "description": "用于城市选择下拉菜单",
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {
        "type": "object",
        "required": ["key", "value"],
        "properties": {
          "key": {
            "type": "string",
            "title": "下拉菜单提交值(如:chengdu)"
          },
          "value": {
            "type": "string",
            "title": "下拉菜单项名称(如:成都)"
          }
        },
        "message": {
          "required": "必须完整填写表单的每一项"
        }
      }
    }
    ```




#### DMS自定义文件上传(配合使用[dms-upload](https://github.com/gavin1995/dms-upload))

```bash
# 有任何问题可以加最下面的QQ群
# dms-upload带有权限验证(该功能默认关闭,外网使用请打开相关注释)
# 需要先执行`dms-upload/database/dms-upload.sql`
# 执行`dms-upload/database/init.sql`后,即可通过root root1234用户授权(也可以使用/api/create创建)
# 修改项目中mysql/redis相关配置`dms-upload/config/config.default.js`(mysql默认密码为:root1234)
# 默认文件保存在/usr/local/services/cdn/dms目录,通过//127.0.0.1:5000/dms访问
# 修改保存路径及访问域名,请修改dms-upload/config/config.default.js: cdnDir、cdnPrefix
# 建议改写dms-upload与自己公司的CDN、云存储等结合,或者独立部署一台服务器,通过lsyncd做实时文件同步
> git clone https://github.com/gavin1995/dms-upload.git # 获取dms-upload项目
> yarn # npm install
> yarn start # npm run start
```

#### 数据访问(配合使用[dms-api](https://github.com/gavin1995/dms-api))

```bash
# 有任何问题可以加最下面的微信群
# 获取模块数据
# 通过dms平台的【运营配置】->【数据管理】->【模块列表】->【编辑模块数据】
# 获取到请求前缀与唯一标示,拼装在一起即可发起GET请求
> git clone https://github.com/gavin1995/dms-api.git # 获取dms-api项目
> yarn # npm install
> yarn start # npm run start
```

#### 数据审核(配合使用[dms-fetch](https://github.com/gavin1995/dms-fetch))

```bash
# 有任何问题可以加最下面的微信群
# 在需要用到DMS的项目里面执行
> yarn add dms-fetch # npm install --save dms-fetch
```

#### 审核

在DMS中配置【开发配置】->【模块管理】中配置【关联审核地址】

地址支持参数匹配,如:

```bash
# 配置模块是使用了city参数,则地址可以配为
https://your-app.com?_c={city} # 选择参数不同时,跳转的审核地址也会不一样
```

#### 调试

```bash
> yarn dev # npm run dev 编译后请替换public里相关文件,并修改config/manifest.json
```

### FAQ

<details>
  <summary>如何使用CDN?</summary>
    
  1. 直接利用nginx将相关目录映射出去
  
  2. 使用<a href="https://github.com/axkibe/lsyncd" target="_blank">lsyncd</a>将相关目录同步到线上相关CDN机器、云存储等(有些CDN需要强刷,目前DMS原生支持Azure CDN强刷)
</details>

<p></p>

<details>
  <summary>怎么使用Azure CDN?</summary>
  
  1. 打开dms-upload/app/controller/put以下注释
    
    const { refreshRes } = require('../util/azure'); // 10行左右
    await refreshRes(fileUrl); // 51行左右
    
  2.配置Azure CDN相关配置:dms-upload/app/util/azure.js

</details>

<p></p>

<details>
  <summary>如果遇到未知错误、意外操作怎么办?</summary>
  
  dms自身有Schema自动保存功能,重新进入页面(刷新)即可,也可以打开控制台,每次对Schema的修改都会打印到浏览器的控制台。
</details>

<p></p>

<details>
  <summary>为什么不建议直接使用dms-fetch?</summary>
  
  dms-fetch只是简单做了数据连接拼装的事情,建议直接将<a href="https://github.com/gavin1995/dms-fetch/blob/master/src/index.js" target="_blank">相关使用到的代码</a>写入自己项目,统一请求处理,统一错误处理。
</details>

<p></p>

<details>
  <summary>salt放在前端,如何做数据链接防盗??</summary>
  可以使用我朋友的前端代码加密:
  <a href="https://github.com/qiaozi-tech/SecurityWorker" target="_blank">SecurityWorker</a>,独立Javascript VM + 二进制混淆,几乎是不可能做到代码反向的,也就看不到salt了。
</details>

<p></p>

<details>
  <summary>为什么数据库使用Mysql?而不用MongoDB等Json友好型存储引擎?</summary>
  在生产环境中,所有请求都会走缓存/CDN。
  
  对于用什么存储原始数据不是很重要,Mysql对于多数开发更加友好易用,且在后台配置数据时不需要过多地考虑性能问题。
</details>

<p></p>

<details>
  <summary>Schema与数据的存储为什么不直接用Mysql5.7.8的原生JSON类型?</summary>
  在生产环境中,使用到Mysql5.7.8+的公司应该是少数,考虑到大多数实际场景,所以使用TEXT类型存储。
  
  当然有需要的同学,可以直接将相关数据字段改为JSON。
</details>

<p></p>


### 注意

* 用Redis可能遇到的问题:针对用DMS应用量巨大的公司,会使redis集群占用内存飙高,随着业务不断的增加,该集群的稳定性要求会不断提高,如果集群挂掉,所有压力将使mysql承接,请提前做好相应的预防措施
* 不建议直接使用dms-fetch
* 若npm安装出现问题,请使用yarn
* 若超管需要访问非自己创建的应用,需要先给自己授权(防止误操作)
* 若dms不能使用 127.0.0.1:7100 访问dms-upload时,请修改dms/app/util/constants.js中的dmsUploadAPI

### 参与贡献

我非常欢迎你的贡献,你可以通过以下方式和我一起共建 :smiley::

- 在你的公司或个人项目中使用`dms`。
- 通过 [Issue](https://github.com/gavin1995/dms/issues) 报告 bug 或进行咨询。
- 提交 [Pull Request](https://github.com/gavin1995/dms/pulls) 改进 `dms` 的代码(注意:提交前请先执行`yarn build`产出可直接start启动的代码)。


================================================
FILE: app/assets/common/menu.js
================================================
import { isUrl } from '../utils/utils';

const menuData = [
  {
    name: '开发配置',
    icon: 'dashboard',
    path: 'development',
    children: [
      {
        name: '应用管理',
        path: 'app',
      },
    ],
  },
  {
    name: '运营配置',
    icon: 'form',
    path: 'operations',
    children: [
      {
        name: '数据管理',
        path: 'app',
      },
    ],
  },
];

function formatter(data, parentPath = '/', parentAuthority) {
  return data.map(item => {
    let { path } = item;
    if (!isUrl(path)) {
      path = parentPath + item.path;
    }
    const result = {
      ...item,
      path,
      authority: item.authority || parentAuthority,
    };
    if (item.children) {
      result.children = formatter(item.children, `${parentPath}${item.path}/`, item.authority);
    }
    return result;
  });
}

export const getMenuData = () => formatter(menuData);


================================================
FILE: app/assets/common/router.js
================================================
import { createElement } from 'react';
import dynamic from 'dva/dynamic';
import pathToRegexp from 'path-to-regexp';
import { getMenuData } from './menu';

let routerDataCache;

const modelNotExisted = (app, model) =>
  // eslint-disable-next-line
  !app._models.some(({ namespace }) => {
    return namespace === model.substring(model.lastIndexOf('/') + 1);
  });

// wrapper of dynamic
const dynamicWrapper = (app, models, component) => {
  // () => require('module')
  // transformed by babel-plugin-dynamic-import-node-sync
  if (component.toString().indexOf('.then(') < 0) {
    models.forEach(model => {
      if (modelNotExisted(app, model)) {
        // eslint-disable-next-line
        app.model(require(`../models/${model}`).default);
      }
    });
    return props => {
      if (!routerDataCache) {
        routerDataCache = getRouterData(app);
      }
      return createElement(component().default, {
        ...props,
        routerData: routerDataCache,
      });
    };
  }
  // () => import('module')
  return dynamic({
    app,
    models: () =>
      models.filter(model => modelNotExisted(app, model)).map(m => import(`../models/${m}.js`)),
    // add routerData prop
    component: () => {
      if (!routerDataCache) {
        routerDataCache = getRouterData(app);
      }
      return component().then(raw => {
        const Component = raw.default || raw;
        return props =>
          createElement(Component, {
            ...props,
            routerData: routerDataCache,
          });
      });
    },
  });
};

function getFlatMenuData(menus) {
  let keys = {};
  menus.forEach(item => {
    if (item.children) {
      keys[item.path] = { ...item };
      keys = { ...keys, ...getFlatMenuData(item.children) };
    } else {
      keys[item.path] = { ...item };
    }
  });
  return keys;
}

export const getRouterData = (app) => {
  const routerConfig = {
    '/': {
      component: dynamicWrapper(app, ['user', 'login'], () => import('../layouts/BasicLayout')),
    },
    '/development/app': {
      component: dynamicWrapper(app, ['user'], () => import('../routes/Development/App')),
    },
    '/development/module': {
      component: dynamicWrapper(app, [], () => import('../routes/Development/Module')),
    },
    '/development/param': {
      component: dynamicWrapper(app, [], () => import('../routes/Development/Param')),
    },
    '/development/schema': {
      component: dynamicWrapper(app, [], () => import('../routes/Development/Schema')),
    },
    '/operations/app': {
      component: dynamicWrapper(app, [], () => import('../routes/Operations/App')),
    },
    '/operations/module': {
      component: dynamicWrapper(app, [], () => import('../routes/Operations/Module')),
    },
    '/operations/data': {
      component: dynamicWrapper(app, [], () => import('../routes/Operations/Data')),
    },
    '/result/success': {
      component: dynamicWrapper(app, [], () => import('../routes/Result/Success')),
    },
    '/result/fail': {
      component: dynamicWrapper(app, [], () => import('../routes/Result/Error')),
    },
    '/exception/403': {
      component: dynamicWrapper(app, [], () => import('../routes/Exception/403')),
    },
    '/exception/404': {
      component: dynamicWrapper(app, [], () => import('../routes/Exception/404')),
    },
    '/exception/500': {
      component: dynamicWrapper(app, [], () => import('../routes/Exception/500')),
    },
    '/exception/trigger': {
      component: dynamicWrapper(app, ['error'], () =>
        import('../routes/Exception/triggerException')
      ),
    },
    '/user': {
      component: dynamicWrapper(app, [], () => import('../layouts/UserLayout')),
    },
    '/user/login': {
      component: dynamicWrapper(app, ['login'], () => import('../routes/User/Login')),
    },
    '/user/register': {
      component: dynamicWrapper(app, ['register'], () => import('../routes/User/Register')),
    },
    '/user/register-result': {
      component: dynamicWrapper(app, [], () => import('../routes/User/RegisterResult')),
    }
  };
  // Get name from ./menu.js or just set it in the router data.
  const menuData = getFlatMenuData(getMenuData());

  // Route configuration data
  // eg. {name,authority ...routerConfig }
  const routerData = {};
  // The route matches the menu
  Object.keys(routerConfig).forEach(path => {
    // Regular match item name
    // eg.  router /user/:id === /user/chen
    const pathRegexp = pathToRegexp(path);
    const menuKey = Object.keys(menuData).find(key => pathRegexp.test(`${key}`));
    let menuItem = {};
    // If menuKey is not empty
    if (menuKey) {
      menuItem = menuData[menuKey];
    }
    let router = routerConfig[path];
    // If you need to configure complex parameter routing,
    // https://github.com/ant-design/ant-design-pro-site/blob/master/docs/router-and-nav.md#%E5%B8%A6%E5%8F%82%E6%95%B0%E7%9A%84%E8%B7%AF%E7%94%B1%E8%8F%9C%E5%8D%95
    // eg . /list/:type/user/info/:id
    router = {
      ...router,
      name: router.name || menuItem.name,
      authority: router.authority || menuItem.authority,
      hideInBreadcrumb: router.hideInBreadcrumb || menuItem.hideInBreadcrumb,
    };
    routerData[path] = router;
  });
  return routerData;
};


================================================
FILE: app/assets/components/ActiveChart/index.js
================================================
import React, { Component } from 'react';

import { MiniArea } from '../Charts';
import NumberInfo from '../NumberInfo';

import styles from './index.less';

function fixedZero(val) {
  return val * 1 < 10 ? `0${val}` : val;
}

function getActiveData() {
  const activeData = [];
  for (let i = 0; i < 24; i += 1) {
    activeData.push({
      x: `${fixedZero(i)}:00`,
      y: Math.floor(Math.random() * 200) + i * 50,
    });
  }
  return activeData;
}

export default class ActiveChart extends Component {
  state = {
    activeData: getActiveData(),
  };

  componentDidMount() {
    this.timer = setInterval(() => {
      this.setState({
        activeData: getActiveData(),
      });
    }, 1000);
  }

  componentWillUnmount() {
    clearInterval(this.timer);
  }

  render() {
    const { activeData = [] } = this.state;

    return (
      <div className={styles.activeChart}>
        <NumberInfo subTitle="目标评估" total="有望达到预期" />
        <div style={{ marginTop: 32 }}>
          <MiniArea
            animate={false}
            line
            borderWidth={2}
            height={84}
            scale={{
              y: {
                tickCount: 3,
              },
            }}
            yAxis={{
              tickLine: false,
              label: false,
              title: false,
              line: false,
            }}
            data={activeData}
          />
        </div>
        {activeData && (
          <div className={styles.activeChartGrid}>
            <p>{[...activeData].sort()[activeData.length - 1].y + 200} 亿元</p>
            <p>{[...activeData].sort()[Math.floor(activeData.length / 2)].y} 亿元</p>
          </div>
        )}
        {activeData && (
          <div className={styles.activeChartLegend}>
            <span>00:00</span>
            <span>{activeData[Math.floor(activeData.length / 2)].x}</span>
            <span>{activeData[activeData.length - 1].x}</span>
          </div>
        )}
      </div>
    );
  }
}


================================================
FILE: app/assets/components/ActiveChart/index.less
================================================
.activeChart {
  position: relative;
}
.activeChartGrid {
  p {
    position: absolute;
    top: 80px;
  }
  p:last-child {
    top: 115px;
  }
}
.activeChartLegend {
  position: relative;
  font-size: 0;
  margin-top: 8px;
  height: 20px;
  line-height: 20px;
  span {
    display: inline-block;
    font-size: 12px;
    text-align: center;
    width: 33.33%;
  }
  span:first-child {
    text-align: left;
  }
  span:last-child {
    text-align: right;
  }
}


================================================
FILE: app/assets/components/Authorized/Authorized.js
================================================
import React from 'react';
import CheckPermissions from './CheckPermissions';

class Authorized extends React.Component {
  render() {
    const { children, authority, noMatch = null } = this.props;
    const childrenRender = typeof children === 'undefined' ? null : children;
    return CheckPermissions(authority, childrenRender, noMatch);
  }
}

export default Authorized;


================================================
FILE: app/assets/components/Authorized/AuthorizedRoute.js
================================================
import React from 'react';
import { Route, Redirect } from 'react-router-dom';
import Authorized from './Authorized';

class AuthorizedRoute extends React.Component {
  render() {
    const { component: Component, render, authority, redirectPath, ...rest } = this.props;
    return (
      <Authorized
        authority={authority}
        noMatch={<Route {...rest} render={() => <Redirect to={{ pathname: redirectPath }} />} />}
      >
        <Route {...rest} render={props => (Component ? <Component {...props} /> : render(props))} />
      </Authorized>
    );
  }
}

export default AuthorizedRoute;


================================================
FILE: app/assets/components/Authorized/CheckPermissions.js
================================================
import React from 'react';
import PromiseRender from './PromiseRender';
import { CURRENT } from './index';

function isPromise(obj) {
  return (
    !!obj &&
    (typeof obj === 'object' || typeof obj === 'function') &&
    typeof obj.then === 'function'
  );
}

/**
 * 通用权限检查方法
 * Common check permissions method
 * @param { 权限判定 Permission judgment type string |array | Promise | Function } authority
 * @param { 你的权限 Your permission description  type:string} currentAuthority
 * @param { 通过的组件 Passing components } target
 * @param { 未通过的组件 no pass components } Exception
 */
const checkPermissions = (authority, currentAuthority, target, Exception) => {
  // 没有判定权限.默认查看所有
  // Retirement authority, return target;
  if (!authority) {
    return target;
  }
  // 数组处理
  if (Array.isArray(authority)) {
    if (authority.indexOf(currentAuthority) >= 0) {
      return target;
    }
    return Exception;
  }

  // string 处理
  if (typeof authority === 'string') {
    if (authority === currentAuthority) {
      return target;
    }
    return Exception;
  }

  // Promise 处理
  if (isPromise(authority)) {
    return <PromiseRender ok={target} error={Exception} promise={authority} />;
  }

  // Function 处理
  if (typeof authority === 'function') {
    try {
      const bool = authority(currentAuthority);
      if (bool) {
        return target;
      }
      return Exception;
    } catch (error) {
      throw error;
    }
  }
  throw new Error('unsupported parameters');
};

export { checkPermissions };

const check = (authority, target, Exception) => {
  return checkPermissions(authority, CURRENT, target, Exception);
};

export default check;


================================================
FILE: app/assets/components/Authorized/CheckPermissions.test.js
================================================
import { checkPermissions } from './CheckPermissions.js';

const target = 'ok';
const error = 'error';

describe('test CheckPermissions', () => {
  it('Correct string permission authentication', () => {
    expect(checkPermissions('user', 'user', target, error)).toEqual('ok');
  });
  it('Correct string permission authentication', () => {
    expect(checkPermissions('user', 'NULL', target, error)).toEqual('error');
  });
  it('authority is undefined , return ok', () => {
    expect(checkPermissions(null, 'NULL', target, error)).toEqual('ok');
  });
  it('currentAuthority is undefined , return error', () => {
    expect(checkPermissions('admin', null, target, error)).toEqual('error');
  });
  it('Wrong string permission authentication', () => {
    expect(checkPermissions('admin', 'user', target, error)).toEqual('error');
  });
  it('Correct Array permission authentication', () => {
    expect(checkPermissions(['user', 'admin'], 'user', target, error)).toEqual('ok');
  });
  it('Wrong Array permission authentication,currentAuthority error', () => {
    expect(checkPermissions(['user', 'admin'], 'user,admin', target, error)).toEqual('error');
  });
  it('Wrong Array permission authentication', () => {
    expect(checkPermissions(['user', 'admin'], 'guest', target, error)).toEqual('error');
  });
  it('Wrong Function permission authentication', () => {
    expect(checkPermissions(() => false, 'guest', target, error)).toEqual('error');
  });
  it('Correct Function permission authentication', () => {
    expect(checkPermissions(() => true, 'guest', target, error)).toEqual('ok');
  });
});


================================================
FILE: app/assets/components/Authorized/PromiseRender.js
================================================
import React from 'react';
import { Spin } from 'antd';

export default class PromiseRender extends React.PureComponent {
  state = {
    component: null,
  };
  componentDidMount() {
    this.setRenderComponent(this.props);
  }
  componentWillReceiveProps(nextProps) {
    // new Props enter
    this.setRenderComponent(nextProps);
  }
  // set render Component : ok or error
  setRenderComponent(props) {
    const ok = this.checkIsInstantiation(props.ok);
    const error = this.checkIsInstantiation(props.error);
    props.promise
      .then(() => {
        this.setState({
          component: ok,
        });
      })
      .catch(() => {
        this.setState({
          component: error,
        });
      });
  }
  // Determine whether the incoming component has been instantiated
  // AuthorizedRoute is already instantiated
  // Authorized  render is already instantiated, children is no instantiated
  // Secured is not instantiated
  checkIsInstantiation = target => {
    if (!React.isValidElement(target)) {
      return target;
    }
    return () => target;
  };
  render() {
    const Component = this.state.component;
    return Component ? (
      <Component {...this.props} />
    ) : (
      <div
        style={{
          width: '100%',
          height: '100%',
          margin: 'auto',
          paddingTop: 50,
          textAlign: 'center',
        }}
      >
        <Spin size="large" />
      </div>
    );
  }
}


================================================
FILE: app/assets/components/Authorized/Secured.js
================================================
import React from 'react';
import Exception from '../Exception/index';
import CheckPermissions from './CheckPermissions';
/**
 * 默认不能访问任何页面
 * default is "NULL"
 */
const Exception403 = () => <Exception type="403" style={{ minHeight: 500, height: '80%' }} />;

// Determine whether the incoming component has been instantiated
// AuthorizedRoute is already instantiated
// Authorized  render is already instantiated, children is no instantiated
// Secured is not instantiated
const checkIsInstantiation = target => {
  if (!React.isValidElement(target)) {
    return target;
  }
  return () => target;
};

/**
 * 用于判断是否拥有权限访问此view权限
 * authority 支持传入  string ,funtion:()=>boolean|Promise
 * e.g. 'user' 只有user用户能访问
 * e.g. 'user,admin' user和 admin 都能访问
 * e.g. ()=>boolean 返回true能访问,返回false不能访问
 * e.g. Promise  then 能访问   catch不能访问
 * e.g. authority support incoming string, funtion: () => boolean | Promise
 * e.g. 'user' only user user can access
 * e.g. 'user, admin' user and admin can access
 * e.g. () => boolean true to be able to visit, return false can not be accessed
 * e.g. Promise then can not access the visit to catch
 * @param {string | function | Promise} authority
 * @param {ReactNode} error 非必需参数
 */
const authorize = (authority, error) => {
  /**
   * conversion into a class
   * 防止传入字符串时找不到staticContext造成报错
   * String parameters can cause staticContext not found error
   */
  let classError = false;
  if (error) {
    classError = () => error;
  }
  if (!authority) {
    throw new Error('authority is required');
  }
  return function decideAuthority(targer) {
    const component = CheckPermissions(authority, targer, classError || Exception403);
    return checkIsInstantiation(component);
  };
};

export default authorize;


================================================
FILE: app/assets/components/Authorized/demo/AuthorizedArray.md
================================================
---
order: 1
title: 
  zh-CN: 使用数组作为参数
  en-US: Use Array as a parameter
---

Use Array as a parameter

```jsx
import RenderAuthorized from 'ant-design-pro/lib/Authorized';
import { Alert } from 'antd';

const Authorized = RenderAuthorized('user');
const noMatch = <Alert message="No permission." type="error" showIcon />;

ReactDOM.render(
  <Authorized authority={['user', 'admin']} noMatch={noMatch}>
    <Alert message="Use Array as a parameter passed!" type="success" showIcon />
  </Authorized>,
  mountNode,
);
```


================================================
FILE: app/assets/components/Authorized/demo/AuthorizedFunction.md
================================================
---
order: 2
title: 
  zh-CN: 使用方法作为参数
  en-US: Use function as a parameter
---

Use Function as a parameter

```jsx
import RenderAuthorized from 'ant-design-pro/lib/Authorized';
import { Alert } from 'antd';

const Authorized = RenderAuthorized('user');
const noMatch = <Alert message="No permission." type="error" showIcon />;

const havePermission = () => {
  return false;
};

ReactDOM.render(
  <Authorized authority={havePermission} noMatch={noMatch}>
    <Alert
      message="Use Function as a parameter passed!"
      type="success"
      showIcon
    />
  </Authorized>,
  mountNode,
);
```


================================================
FILE: app/assets/components/Authorized/demo/basic.md
================================================
---
order: 0
title: 
  zh-CN: 基本使用
  en-US: Basic use
---

Basic use

```jsx
import RenderAuthorized from 'ant-design-pro/lib/Authorized';
import { Alert } from 'antd';

const Authorized = RenderAuthorized('user');
const noMatch = <Alert message="No permission." type="error" showIcon />;

ReactDOM.render(
  <div>
    <Authorized authority="admin" noMatch={noMatch}>
      <Alert message="user Passed!" type="success" showIcon />
    </Authorized>
  </div>,
  mountNode,
);
```


================================================
FILE: app/assets/components/Authorized/demo/secured.md
================================================
---
order: 3
title: 
  zh-CN: 注解基本使用
  en-US: Basic use secured
---

secured demo used

```jsx
import RenderAuthorized from 'ant-design-pro/lib/Authorized';
import { Alert } from 'antd';

const { Secured } = RenderAuthorized('user');

@Secured('admin')
class TestSecuredString extends React.Component {
  render() {
    <Alert message="user Passed!" type="success" showIcon />;
  }
}
ReactDOM.render(
  <div>
    <TestSecuredString />
  </div>,
  mountNode,
);
```


================================================
FILE: app/assets/components/Authorized/index.d.ts
================================================
import * as React from 'react';
import { RouteProps } from 'react-router';

type authorityFN = (currentAuthority?: string) => boolean;

type authority = string | Array<string> | authorityFN | Promise<any>;

export type IReactComponent<P = any> =
  | React.StatelessComponent<P>
  | React.ComponentClass<P>
  | React.ClassicComponentClass<P>;

interface Secured {
  (authority: authority, error?: React.ReactNode): <T extends IReactComponent>(target: T) => T;
}

export interface AuthorizedRouteProps extends RouteProps {
  authority: authority;
}
export class AuthorizedRoute extends React.Component<AuthorizedRouteProps, any> {}

interface check {
  <T extends IReactComponent, S extends IReactComponent>(
    authority: authority,
    target: T,
    Exception: S
  ): T | S;
}

interface AuthorizedProps {
  authority: authority;
  noMatch?: React.ReactNode;
}

export class Authorized extends React.Component<AuthorizedProps, any> {
  static Secured: Secured;
  static AuthorizedRoute: typeof AuthorizedRoute;
  static check: check;
}

declare function renderAuthorize(currentAuthority: string): typeof Authorized;

export default renderAuthorize;


================================================
FILE: app/assets/components/Authorized/index.js
================================================
import Authorized from './Authorized';
import AuthorizedRoute from './AuthorizedRoute';
import Secured from './Secured';
import check from './CheckPermissions.js';

/* eslint-disable import/no-mutable-exports */
let CURRENT = 'NULL';

Authorized.Secured = Secured;
Authorized.AuthorizedRoute = AuthorizedRoute;
Authorized.check = check;

/**
 * use  authority or getAuthority
 * @param {string|()=>String} currentAuthority
 */
const renderAuthorize = currentAuthority => {
  if (currentAuthority) {
    if (currentAuthority.constructor.name === 'Function') {
      CURRENT = currentAuthority();
    }
    if (currentAuthority.constructor.name === 'String') {
      CURRENT = currentAuthority;
    }
  } else {
    CURRENT = 'NULL';
  }
  return Authorized;
};

export { CURRENT };
export default renderAuthorize;


================================================
FILE: app/assets/components/Authorized/index.md
================================================
---
title:
  en-US: Authorized
  zh-CN: Authorized
subtitle: 权限
cols: 1
order: 15
---

权限组件,通过比对现有权限与准入权限,决定相关元素的展示。

## API

### RenderAuthorized

`RenderAuthorized: (currentAuthority: string | () => string) => Authorized`

权限组件默认 export RenderAuthorized 函数,它接收当前权限作为参数,返回一个权限对象,该对象提供以下几种使用方式。


### Authorized

最基础的权限控制。

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| children    | 正常渲染的元素,权限判断通过时展示           | ReactNode  | - |
| authority   | 准入权限/权限判断         | `string | array | Promise | (currentAuthority) => boolean` | - |
| noMatch     | 权限异常渲染元素,权限判断不通过时展示        | ReactNode  | - |

### Authorized.AuthorizedRoute

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| authority     | 准入权限/权限判断         | `string | array | Promise | (currentAuthority) => boolean` | - |
| redirectPath  | 权限异常时重定向的页面路由                | string  | - |

其余参数与 `Route` 相同。

### Authorized.Secured

注解方式,`@Authorized.Secured(authority, error)`

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| authority     | 准入权限/权限判断         | `string | Promise | (currentAuthority) => boolean` | - |
| error  | 权限异常时渲染元素                |  ReactNode | <Exception type="403" /> |

### Authorized.check

函数形式的 Authorized,用于某些不能被 HOC 包裹的组件。 `Authorized.check(authority, target, Exception)`  
注意:传入一个 Promise 时,无论正确还是错误返回的都是一个 ReactClass。

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| authority     | 准入权限/权限判断         | `string | Promise | (currentAuthority) => boolean` | - |
| target     | 权限判断通过时渲染的元素         | ReactNode | - |
| Exception  | 权限异常时渲染元素                |  ReactNode | - |


================================================
FILE: app/assets/components/AvatarList/AvatarItem.d.ts
================================================
import * as React from 'react';
export interface IAvatarItemProps {
  tips: React.ReactNode;
  src: string;
  style?: React.CSSProperties;
}

export default class AvatarItem extends React.Component<IAvatarItemProps, any> {
  constructor(props: IAvatarItemProps);
}


================================================
FILE: app/assets/components/AvatarList/demo/simple.md
================================================
---
order: 0
title: 
  zh-CN: 基础样例 
  en-US: Basic Usage
---

Simplest of usage.

````jsx
import AvatarList from 'ant-design-pro/lib/AvatarList';

ReactDOM.render(
  <AvatarList size="mini">
    <AvatarList.Item tips="Jake" src="https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png" />
    <AvatarList.Item tips="Andy" src="https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png" />
    <AvatarList.Item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
  </AvatarList>
, mountNode);
````


================================================
FILE: app/assets/components/AvatarList/index.d.ts
================================================
import * as React from 'react';
import AvatarItem from './AvatarItem';

export interface IAvatarListProps {
  size?: 'large' | 'small' | 'mini' | 'default';
  style?: React.CSSProperties;
  children: React.ReactElement<AvatarItem> | Array<React.ReactElement<AvatarItem>>;
}

export default class AvatarList extends React.Component<IAvatarListProps, any> {
  public static Item: typeof AvatarItem;
}


================================================
FILE: app/assets/components/AvatarList/index.en-US.md
================================================
---
title: AvatarList
order: 1
cols: 1
---

A list of user's avatar for project or group member list frequently. If a large or small AvatarList is desired, set the `size` property to either `large` or `small` and `mini` respectively. Omit the `size` property for a AvatarList with the default size.

## API

### AvatarList

| Property | Description | Type | Default |
|----------|------------------------------------------|-------------|-------|
| size | size of list | `large`、`small` 、`mini`, `default` | `default` |

### AvatarList.Item

| Property | Description | Type | Default |
|----------|------------------------------------------|-------------|-------|
| tips | title tips for avatar item | ReactNode\/string | - |
| src | the address of the image for an image avatar | string | - |


================================================
FILE: app/assets/components/AvatarList/index.js
================================================
import React from 'react';
import { Tooltip, Avatar } from 'antd';
import classNames from 'classnames';

import styles from './index.less';

const AvatarList = ({ children, size, ...other }) => {
  const childrenWithProps = React.Children.map(children, child =>
    React.cloneElement(child, {
      size,
    })
  );

  return (
    <div {...other} className={styles.avatarList}>
      <ul> {childrenWithProps} </ul>
    </div>
  );
};

const Item = ({ src, size, tips, onClick = () => {} }) => {
  const cls = classNames(styles.avatarItem, {
    [styles.avatarItemLarge]: size === 'large',
    [styles.avatarItemSmall]: size === 'small',
    [styles.avatarItemMini]: size === 'mini',
  });

  return (
    <li className={cls} onClick={onClick}>
      {tips ? (
        <Tooltip title={tips}>
          <Avatar src={src} size={size} style={{ cursor: 'pointer' }} />
        </Tooltip>
      ) : (
        <Avatar src={src} size={size} />
      )}
    </li>
  );
};

AvatarList.Item = Item;

export default AvatarList;


================================================
FILE: app/assets/components/AvatarList/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.avatarList {
  display: inline-block;
  ul {
    display: inline-block;
    margin-left: 8px;
    font-size: 0;
  }
}

.avatarItem {
  display: inline-block;
  font-size: @font-size-base;
  margin-left: -8px;
  width: @avatar-size-base;
  height: @avatar-size-base;
  :global {
    .ant-avatar {
      border: 1px solid #fff;
    }
  }
}

.avatarItemLarge {
  width: @avatar-size-lg;
  height: @avatar-size-lg;
}

.avatarItemSmall {
  width: @avatar-size-sm;
  height: @avatar-size-sm;
}

.avatarItemMini {
  width: 20px;
  height: 20px;
  :global {
    .ant-avatar {
      width: 20px;
      height: 20px;
      line-height: 20px;
    }
  }
}


================================================
FILE: app/assets/components/AvatarList/index.zh-CN.md
================================================
---
title: AvatarList
subtitle: 用户头像列表
order: 1
cols: 1
---

一组用户头像,常用在项目/团队成员列表。可通过设置 `size` 属性来指定头像大小。

## API

### AvatarList

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| size | 头像大小 | `large`、`small` 、`mini`, `default` | `default` |

### AvatarList.Item

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| tips | 头像展示文案 | ReactNode\/string | - |
| src | 头像图片连接 | string | - |


================================================
FILE: app/assets/components/Charts/Bar/index.d.ts
================================================
import * as React from 'react';
export interface IBarProps {
  title: React.ReactNode;
  color?: string;
  padding?: [number, number, number, number];
  height: number;
  data: Array<{
    x: string;
    y: number;
  }>;
  autoLabel?: boolean;
  style?: React.CSSProperties;
}

export default class Bar extends React.Component<IBarProps, any> {}


================================================
FILE: app/assets/components/Charts/Bar/index.js
================================================
import React, { Component } from 'react';
import { Chart, Axis, Tooltip, Geom } from 'bizcharts';
import Debounce from 'lodash-decorators/debounce';
import Bind from 'lodash-decorators/bind';
import autoHeight from '../autoHeight';
import styles from '../index.less';

@autoHeight()
class Bar extends Component {
  state = {
    autoHideXLabels: false,
  };

  componentDidMount() {
    window.addEventListener('resize', this.resize);
  }

  componentWillUnmount() {
    window.removeEventListener('resize', this.resize);
  }

  @Bind()
  @Debounce(400)
  resize() {
    if (!this.node) {
      return;
    }
    const canvasWidth = this.node.parentNode.clientWidth;
    const { data = [], autoLabel = true } = this.props;
    if (!autoLabel) {
      return;
    }
    const minWidth = data.length * 30;
    const { autoHideXLabels } = this.state;

    if (canvasWidth <= minWidth) {
      if (!autoHideXLabels) {
        this.setState({
          autoHideXLabels: true,
        });
      }
    } else if (autoHideXLabels) {
      this.setState({
        autoHideXLabels: false,
      });
    }
  }

  handleRoot = n => {
    this.root = n;
  };

  handleRef = n => {
    this.node = n;
  };

  render() {
    const {
      height,
      title,
      forceFit = true,
      data,
      color = 'rgba(24, 144, 255, 0.85)',
      padding,
    } = this.props;

    const { autoHideXLabels } = this.state;

    const scale = {
      x: {
        type: 'cat',
      },
      y: {
        min: 0,
      },
    };

    const tooltip = [
      'x*y',
      (x, y) => ({
        name: x,
        value: y,
      }),
    ];

    return (
      <div className={styles.chart} style={{ height }} ref={this.handleRoot}>
        <div ref={this.handleRef}>
          {title && <h4 style={{ marginBottom: 20 }}>{title}</h4>}
          <Chart
            scale={scale}
            height={title ? height - 41 : height}
            forceFit={forceFit}
            data={data}
            padding={padding || 'auto'}
          >
            <Axis
              name="x"
              title={false}
              label={autoHideXLabels ? false : {}}
              tickLine={autoHideXLabels ? false : {}}
            />
            <Axis name="y" min={0} />
            <Tooltip showTitle={false} crosshairs={false} />
            <Geom type="interval" position="x*y" color={color} tooltip={tooltip} />
          </Chart>
        </div>
      </div>
    );
  }
}

export default Bar;


================================================
FILE: app/assets/components/Charts/ChartCard/index.d.ts
================================================
import * as React from 'react';
export interface IChartCardProps {
  title: React.ReactNode;
  action?: React.ReactNode;
  total?: React.ReactNode | number | (() => React.ReactNode | number);
  footer?: React.ReactNode;
  contentHeight?: number;
  avatar?: React.ReactNode;
  style?: React.CSSProperties;
}

export default class ChartCard extends React.Component<IChartCardProps, any> {}


================================================
FILE: app/assets/components/Charts/ChartCard/index.js
================================================
import React from 'react';
import { Card, Spin } from 'antd';
import classNames from 'classnames';

import styles from './index.less';

const renderTotal = total => {
  let totalDom;
  switch (typeof total) {
    case 'undefined':
      totalDom = null;
      break;
    case 'function':
      totalDom = <div className={styles.total}>{total()}</div>;
      break;
    default:
      totalDom = <div className={styles.total}>{total}</div>;
  }
  return totalDom;
};

const ChartCard = ({
  loading = false,
  contentHeight,
  title,
  avatar,
  action,
  total,
  footer,
  children,
  ...rest
}) => {
  const content = (
    <div className={styles.chartCard}>
      <div
        className={classNames(styles.chartTop, {
          [styles.chartTopMargin]: !children && !footer,
        })}
      >
        <div className={styles.avatar}>{avatar}</div>
        <div className={styles.metaWrap}>
          <div className={styles.meta}>
            <span className={styles.title}>{title}</span>
            <span className={styles.action}>{action}</span>
          </div>
          {renderTotal(total)}
        </div>
      </div>
      {children && (
        <div className={styles.content} style={{ height: contentHeight || 'auto' }}>
          <div className={contentHeight && styles.contentFixed}>{children}</div>
        </div>
      )}
      {footer && (
        <div
          className={classNames(styles.footer, {
            [styles.footerMargin]: !children,
          })}
        >
          {footer}
        </div>
      )}
    </div>
  );

  return (
    <Card bodyStyle={{ padding: '20px 24px 8px 24px' }} {...rest}>
      {
        <Spin spinning={loading} wrapperClassName={styles.spin}>
          {content}
        </Spin>
      }
    </Card>
  );
};

export default ChartCard;


================================================
FILE: app/assets/components/Charts/ChartCard/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.chartCard {
  position: relative;
  .chartTop {
    position: relative;
    overflow: hidden;
    width: 100%;
  }
  .chartTopMargin {
    margin-bottom: 12px;
  }
  .chartTopHasMargin {
    margin-bottom: 20px;
  }
  .metaWrap {
    float: left;
  }
  .avatar {
    position: relative;
    top: 4px;
    float: left;
    margin-right: 20px;
    img {
      border-radius: 100%;
    }
  }
  .meta {
    color: @text-color-secondary;
    font-size: @font-size-base;
    line-height: 22px;
    height: 22px;
  }
  .action {
    cursor: pointer;
    position: absolute;
    top: 0;
    right: 0;
  }
  .total {
    overflow: hidden;
    text-overflow: ellipsis;
    word-break: break-all;
    white-space: nowrap;
    color: @heading-color;
    margin-top: 4px;
    margin-bottom: 0;
    font-size: 30px;
    line-height: 38px;
    height: 38px;
  }
  .content {
    margin-bottom: 12px;
    position: relative;
    width: 100%;
  }
  .contentFixed {
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
  }
  .footer {
    border-top: 1px solid @border-color-split;
    padding-top: 9px;
    margin-top: 8px;
    & > * {
      position: relative;
    }
  }
  .footerMargin {
    margin-top: 20px;
  }
}

.spin :global(.ant-spin-container) {
  overflow: visible;
}


================================================
FILE: app/assets/components/Charts/Field/index.d.ts
================================================
import * as React from 'react';
export interface IFieldProps {
  label: React.ReactNode;
  value: React.ReactNode;
  style?: React.CSSProperties;
}

export default class Field extends React.Component<IFieldProps, any> {}


================================================
FILE: app/assets/components/Charts/Field/index.js
================================================
import React from 'react';

import styles from './index.less';

const Field = ({ label, value, ...rest }) => (
  <div className={styles.field} {...rest}>
    <span>{label}</span>
    <span>{value}</span>
  </div>
);

export default Field;


================================================
FILE: app/assets/components/Charts/Field/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.field {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin: 0;
  span {
    font-size: @font-size-base;
    line-height: 22px;
  }
  span:last-child {
    margin-left: 8px;
    color: @heading-color;
  }
}


================================================
FILE: app/assets/components/Charts/Gauge/index.d.ts
================================================
import * as React from 'react';
export interface IGaugeProps {
  title: React.ReactNode;
  color?: string;
  height: number;
  bgColor?: number;
  percent: number;
  style?: React.CSSProperties;
}

export default class Gauge extends React.Component<IGaugeProps, any> {}


================================================
FILE: app/assets/components/Charts/Gauge/index.js
================================================
import React from 'react';
import { Chart, Geom, Axis, Coord, Guide, Shape } from 'bizcharts';
import autoHeight from '../autoHeight';

const { Arc, Html, Line } = Guide;

const defaultFormatter = val => {
  switch (val) {
    case '2':
      return '差';
    case '4':
      return '中';
    case '6':
      return '良';
    case '8':
      return '优';
    default:
      return '';
  }
};

Shape.registerShape('point', 'pointer', {
  drawShape(cfg, group) {
    let point = cfg.points[0];
    point = this.parsePoint(point);
    const center = this.parsePoint({
      x: 0,
      y: 0,
    });
    group.addShape('line', {
      attrs: {
        x1: center.x,
        y1: center.y,
        x2: point.x,
        y2: point.y,
        stroke: cfg.color,
        lineWidth: 2,
        lineCap: 'round',
      },
    });
    return group.addShape('circle', {
      attrs: {
        x: center.x,
        y: center.y,
        r: 6,
        stroke: cfg.color,
        lineWidth: 3,
        fill: '#fff',
      },
    });
  },
});

@autoHeight()
export default class Gauge extends React.Component {
  render() {
    const {
      title,
      height,
      percent,
      forceFit = true,
      formatter = defaultFormatter,
      color = '#2F9CFF',
      bgColor = '#F0F2F5',
    } = this.props;
    const cols = {
      value: {
        type: 'linear',
        min: 0,
        max: 10,
        tickCount: 6,
        nice: true,
      },
    };
    const data = [{ value: percent / 10 }];
    return (
      <Chart height={height} data={data} scale={cols} padding={[-16, 0, 16, 0]} forceFit={forceFit}>
        <Coord type="polar" startAngle={-1.25 * Math.PI} endAngle={0.25 * Math.PI} radius={0.8} />
        <Axis name="1" line={null} />
        <Axis
          line={null}
          tickLine={null}
          subTickLine={null}
          name="value"
          zIndex={2}
          gird={null}
          label={{
            offset: -12,
            formatter,
            textStyle: {
              fontSize: 12,
              fill: 'rgba(0, 0, 0, 0.65)',
              textAlign: 'center',
            },
          }}
        />
        <Guide>
          <Line
            start={[3, 0.905]}
            end={[3, 0.85]}
            lineStyle={{
              stroke: color,
              lineDash: null,
              lineWidth: 2,
            }}
          />
          <Line
            start={[5, 0.905]}
            end={[5, 0.85]}
            lineStyle={{
              stroke: color,
              lineDash: null,
              lineWidth: 3,
            }}
          />
          <Line
            start={[7, 0.905]}
            end={[7, 0.85]}
            lineStyle={{
              stroke: color,
              lineDash: null,
              lineWidth: 3,
            }}
          />
          <Arc
            zIndex={0}
            start={[0, 0.965]}
            end={[10, 0.965]}
            style={{
              stroke: bgColor,
              lineWidth: 10,
            }}
          />
          <Arc
            zIndex={1}
            start={[0, 0.965]}
            end={[data[0].value, 0.965]}
            style={{
              stroke: color,
              lineWidth: 10,
            }}
          />
          <Html
            position={['50%', '95%']}
            html={() => {
              return `
                <div style="width: 300px;text-align: center;font-size: 12px!important;">
                  <p style="font-size: 14px; color: rgba(0,0,0,0.43);margin: 0;">${title}</p>
                  <p style="font-size: 24px;color: rgba(0,0,0,0.85);margin: 0;">
                    ${data[0].value * 10}%
                  </p>
                </div>`;
            }}
          />
        </Guide>
        <Geom
          line={false}
          type="point"
          position="value*1"
          shape="pointer"
          color={color}
          active={false}
        />
      </Chart>
    );
  }
}


================================================
FILE: app/assets/components/Charts/MiniArea/index.d.ts
================================================
import * as React from 'react';

// g2已经更新到3.0
// 不带的写了

export interface IAxis {
  title: any;
  line: any;
  gridAlign: any;
  labels: any;
  tickLine: any;
  grid: any;
}

export interface IMiniAreaProps {
  color?: string;
  height: number;
  borderColor?: string;
  line?: boolean;
  animate?: boolean;
  xAxis?: IAxis;
  yAxis?: IAxis;
  data: Array<{
    x: number;
    y: number;
  }>;
}

export default class MiniArea extends React.Component<IMiniAreaProps, any> {}


================================================
FILE: app/assets/components/Charts/MiniArea/index.js
================================================
import React from 'react';
import { Chart, Axis, Tooltip, Geom } from 'bizcharts';
import autoHeight from '../autoHeight';
import styles from '../index.less';

@autoHeight()
export default class MiniArea extends React.Component {
  render() {
    const {
      height,
      data = [],
      forceFit = true,
      color = 'rgba(24, 144, 255, 0.2)',
      borderColor = '#1089ff',
      scale = {},
      borderWidth = 2,
      line,
      xAxis,
      yAxis,
      animate = true,
    } = this.props;

    const padding = [36, 5, 30, 5];

    const scaleProps = {
      x: {
        type: 'cat',
        range: [0, 1],
        ...scale.x,
      },
      y: {
        min: 0,
        ...scale.y,
      },
    };

    const tooltip = [
      'x*y',
      (x, y) => ({
        name: x,
        value: y,
      }),
    ];

    const chartHeight = height + 54;

    return (
      <div className={styles.miniChart} style={{ height }}>
        <div className={styles.chartContent}>
          {height > 0 && (
            <Chart
              animate={animate}
              scale={scaleProps}
              height={chartHeight}
              forceFit={forceFit}
              data={data}
              padding={padding}
            >
              <Axis
                key="axis-x"
                name="x"
                label={false}
                line={false}
                tickLine={false}
                grid={false}
                {...xAxis}
              />
              <Axis
                key="axis-y"
                name="y"
                label={false}
                line={false}
                tickLine={false}
                grid={false}
                {...yAxis}
              />
              <Tooltip showTitle={false} crosshairs={false} />
              <Geom
                type="area"
                position="x*y"
                color={color}
                tooltip={tooltip}
                shape="smooth"
                style={{
                  fillOpacity: 1,
                }}
              />
              {line ? (
                <Geom
                  type="line"
                  position="x*y"
                  shape="smooth"
                  color={borderColor}
                  size={borderWidth}
                  tooltip={false}
                />
              ) : (
                <span style={{ display: 'none' }} />
              )}
            </Chart>
          )}
        </div>
      </div>
    );
  }
}


================================================
FILE: app/assets/components/Charts/MiniBar/index.d.ts
================================================
import * as React from 'react';
export interface IMiniBarProps {
  color?: string;
  height: number;
  data: Array<{
    x: number | string;
    y: number;
  }>;
  style?: React.CSSProperties;
}

export default class MiniBar extends React.Component<IMiniBarProps, any> {}


================================================
FILE: app/assets/components/Charts/MiniBar/index.js
================================================
import React from 'react';
import { Chart, Tooltip, Geom } from 'bizcharts';
import autoHeight from '../autoHeight';
import styles from '../index.less';

@autoHeight()
export default class MiniBar extends React.Component {
  render() {
    const { height, forceFit = true, color = '#1890FF', data = [] } = this.props;

    const scale = {
      x: {
        type: 'cat',
      },
      y: {
        min: 0,
      },
    };

    const padding = [36, 5, 30, 5];

    const tooltip = [
      'x*y',
      (x, y) => ({
        name: x,
        value: y,
      }),
    ];

    // for tooltip not to be hide
    const chartHeight = height + 54;

    return (
      <div className={styles.miniChart} style={{ height }}>
        <div className={styles.chartContent}>
          <Chart
            scale={scale}
            height={chartHeight}
            forceFit={forceFit}
            data={data}
            padding={padding}
          >
            <Tooltip showTitle={false} crosshairs={false} />
            <Geom type="interval" position="x*y" color={color} tooltip={tooltip} />
          </Chart>
        </div>
      </div>
    );
  }
}


================================================
FILE: app/assets/components/Charts/MiniProgress/index.d.ts
================================================
import * as React from 'react';
export interface IMiniProgressProps {
  target: number;
  color?: string;
  strokeWidth?: number;
  percent?: number;
  style?: React.CSSProperties;
}

export default class MiniProgress extends React.Component<IMiniProgressProps, any> {}


================================================
FILE: app/assets/components/Charts/MiniProgress/index.js
================================================
import React from 'react';
import { Tooltip } from 'antd';

import styles from './index.less';

const MiniProgress = ({ target, color = 'rgb(19, 194, 194)', strokeWidth, percent }) => (
  <div className={styles.miniProgress}>
    <Tooltip title={`目标值: ${target}%`}>
      <div className={styles.target} style={{ left: target ? `${target}%` : null }}>
        <span style={{ backgroundColor: color || null }} />
        <span style={{ backgroundColor: color || null }} />
      </div>
    </Tooltip>
    <div className={styles.progressWrap}>
      <div
        className={styles.progress}
        style={{
          backgroundColor: color || null,
          width: percent ? `${percent}%` : null,
          height: strokeWidth || null,
        }}
      />
    </div>
  </div>
);

export default MiniProgress;


================================================
FILE: app/assets/components/Charts/MiniProgress/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.miniProgress {
  padding: 5px 0;
  position: relative;
  width: 100%;
  .progressWrap {
    background-color: @background-color-base;
    position: relative;
  }
  .progress {
    transition: all 0.4s cubic-bezier(0.08, 0.82, 0.17, 1) 0s;
    border-radius: 1px 0 0 1px;
    background-color: @primary-color;
    width: 0;
    height: 100%;
  }
  .target {
    position: absolute;
    top: 0;
    bottom: 0;
    span {
      border-radius: 100px;
      position: absolute;
      top: 0;
      left: 0;
      height: 4px;
      width: 2px;
    }
    span:last-child {
      top: auto;
      bottom: 0;
    }
  }
}


================================================
FILE: app/assets/components/Charts/Pie/index.d.ts
================================================
import * as React from 'react';
export interface IPieProps {
  animate?: boolean;
  color?: string;
  height: number;
  hasLegend?: boolean;
  padding?: [number, number, number, number];
  percent?: number;
  data?: Array<{
    x: string | string;
    y: number;
  }>;
  total?: React.ReactNode | number | (() => React.ReactNode | number);
  title?: React.ReactNode;
  tooltip?: boolean;
  valueFormat?: (value: string) => string | React.ReactNode;
  subTitle?: React.ReactNode;
}

export default class Pie extends React.Component<IPieProps, any> {}


================================================
FILE: app/assets/components/Charts/Pie/index.js
================================================
import React, { Component } from 'react';
import { Chart, Tooltip, Geom, Coord } from 'bizcharts';
import { DataView } from '@antv/data-set';
import { Divider } from 'antd';
import classNames from 'classnames';
import ReactFitText from 'react-fittext';
import Debounce from 'lodash-decorators/debounce';
import Bind from 'lodash-decorators/bind';
import autoHeight from '../autoHeight';

import styles from './index.less';

/* eslint react/no-danger:0 */
@autoHeight()
export default class Pie extends Component {
  state = {
    legendData: [],
    legendBlock: false,
  };

  componentDidMount() {
    this.getLegendData();
    this.resize();
    window.addEventListener('resize', this.resize);
  }

  componentWillReceiveProps(nextProps) {
    if (this.props.data !== nextProps.data) {
      // because of charts data create when rendered
      // so there is a trick for get rendered time
      this.setState(
        {
          legendData: [...this.state.legendData],
        },
        () => {
          this.getLegendData();
        }
      );
    }
  }

  componentWillUnmount() {
    window.removeEventListener('resize', this.resize);
    this.resize.cancel();
  }

  getG2Instance = chart => {
    this.chart = chart;
  };

  // for custom lengend view
  getLegendData = () => {
    if (!this.chart) return;
    const geom = this.chart.getAllGeoms()[0]; // 获取所有的图形
    const items = geom.get('dataArray') || []; // 获取图形对应的

    const legendData = items.map(item => {
      /* eslint no-underscore-dangle:0 */
      const origin = item[0]._origin;
      origin.color = item[0].color;
      origin.checked = true;
      return origin;
    });

    this.setState({
      legendData,
    });
  };

  // for window resize auto responsive legend
  @Bind()
  @Debounce(300)
  resize() {
    const { hasLegend } = this.props;
    if (!hasLegend || !this.root) {
      window.removeEventListener('resize', this.resize);
      return;
    }
    if (this.root.parentNode.clientWidth <= 380) {
      if (!this.state.legendBlock) {
        this.setState({
          legendBlock: true,
        });
      }
    } else if (this.state.legendBlock) {
      this.setState({
        legendBlock: false,
      });
    }
  }

  handleRoot = n => {
    this.root = n;
  };

  handleLegendClick = (item, i) => {
    const newItem = item;
    newItem.checked = !newItem.checked;

    const { legendData } = this.state;
    legendData[i] = newItem;

    const filteredLegendData = legendData.filter(l => l.checked).map(l => l.x);

    if (this.chart) {
      this.chart.filter('x', val => filteredLegendData.indexOf(val) > -1);
    }

    this.setState({
      legendData,
    });
  };

  render() {
    const {
      valueFormat,
      subTitle,
      total,
      hasLegend = false,
      className,
      style,
      height,
      forceFit = true,
      percent = 0,
      color,
      inner = 0.75,
      animate = true,
      colors,
      lineWidth = 1,
    } = this.props;

    const { legendData, legendBlock } = this.state;
    const pieClassName = classNames(styles.pie, className, {
      [styles.hasLegend]: !!hasLegend,
      [styles.legendBlock]: legendBlock,
    });

    const defaultColors = colors;
    let data = this.props.data || [];
    let selected = this.props.selected || true;
    let tooltip = this.props.tooltip || true;
    let formatColor;

    const scale = {
      x: {
        type: 'cat',
        range: [0, 1],
      },
      y: {
        min: 0,
      },
    };

    if (percent) {
      selected = false;
      tooltip = false;
      formatColor = value => {
        if (value === '占比') {
          return color || 'rgba(24, 144, 255, 0.85)';
        } else {
          return '#F0F2F5';
        }
      };

      data = [
        {
          x: '占比',
          y: parseFloat(percent),
        },
        {
          x: '反比',
          y: 100 - parseFloat(percent),
        },
      ];
    }

    const tooltipFormat = [
      'x*percent',
      (x, p) => ({
        name: x,
        value: `${(p * 100).toFixed(2)}%`,
      }),
    ];

    const padding = [12, 0, 12, 0];

    const dv = new DataView();
    dv.source(data).transform({
      type: 'percent',
      field: 'y',
      dimension: 'x',
      as: 'percent',
    });

    return (
      <div ref={this.handleRoot} className={pieClassName} style={style}>
        <ReactFitText maxFontSize={25}>
          <div className={styles.chart}>
            <Chart
              scale={scale}
              height={height}
              forceFit={forceFit}
              data={dv}
              padding={padding}
              animate={animate}
              onGetG2Instance={this.getG2Instance}
            >
              {!!tooltip && <Tooltip showTitle={false} />}
              <Coord type="theta" innerRadius={inner} />
              <Geom
                style={{ lineWidth, stroke: '#fff' }}
                tooltip={tooltip && tooltipFormat}
                type="intervalStack"
                position="percent"
                color={['x', percent ? formatColor : defaultColors]}
                selected={selected}
              />
            </Chart>

            {(subTitle || total) && (
              <div className={styles.total}>
                {subTitle && <h4 className="pie-sub-title">{subTitle}</h4>}
                {/* eslint-disable-next-line */}
                {total && (
                  <div className="pie-stat">{typeof total === 'function' ? total() : total}</div>
                )}
              </div>
            )}
          </div>
        </ReactFitText>

        {hasLegend && (
          <ul className={styles.legend}>
            {legendData.map((item, i) => (
              <li key={item.x} onClick={() => this.handleLegendClick(item, i)}>
                <span
                  className={styles.dot}
                  style={{
                    backgroundColor: !item.checked ? '#aaa' : item.color,
                  }}
                />
                <span className={styles.legendTitle}>{item.x}</span>
                <Divider type="vertical" />
                <span className={styles.percent}>
                  {`${(isNaN(item.percent) ? 0 : item.percent * 100).toFixed(2)}%`}
                </span>
                <span className={styles.value}>{valueFormat ? valueFormat(item.y) : item.y}</span>
              </li>
            ))}
          </ul>
        )}
      </div>
    );
  }
}


================================================
FILE: app/assets/components/Charts/Pie/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.pie {
  position: relative;
  .chart {
    position: relative;
  }
  &.hasLegend .chart {
    width: ~'calc(100% - 240px)';
  }
  .legend {
    position: absolute;
    right: 0;
    min-width: 200px;
    top: 50%;
    transform: translateY(-50%);
    margin: 0 20px;
    list-style: none;
    padding: 0;
    li {
      cursor: pointer;
      margin-bottom: 16px;
      height: 22px;
      line-height: 22px;
      &:last-child {
        margin-bottom: 0;
      }
    }
  }
  .dot {
    border-radius: 8px;
    display: inline-block;
    margin-right: 8px;
    position: relative;
    top: -1px;
    height: 8px;
    width: 8px;
  }
  .line {
    background-color: @border-color-split;
    display: inline-block;
    margin-right: 8px;
    width: 1px;
    height: 16px;
  }
  .legendTitle {
    color: @text-color;
  }
  .percent {
    color: @text-color-secondary;
  }
  .value {
    position: absolute;
    right: 0;
  }
  .title {
    margin-bottom: 8px;
  }
  .total {
    position: absolute;
    left: 50%;
    top: 50%;
    text-align: center;
    height: 62px;
    transform: translate(-50%, -50%);
    & > h4 {
      color: @text-color-secondary;
      font-size: 14px;
      line-height: 22px;
      height: 22px;
      margin-bottom: 8px;
      font-weight: normal;
    }
    & > p {
      color: @heading-color;
      display: block;
      font-size: 1.2em;
      height: 32px;
      line-height: 32px;
      white-space: nowrap;
    }
  }
}

.legendBlock {
  &.hasLegend .chart {
    width: 100%;
    margin: 0 0 32px 0;
  }
  .legend {
    position: relative;
    transform: none;
  }
}


================================================
FILE: app/assets/components/Charts/Radar/index.d.ts
================================================
import * as React from 'react';
export interface IRadarProps {
  title?: React.ReactNode;
  height: number;
  padding?: [number, number, number, number];
  hasLegend?: boolean;
  data: Array<{
    name: string;
    label: string;
    value: string;
  }>;
  style?: React.CSSProperties;
}

export default class Radar extends React.Component<IRadarProps, any> {}


================================================
FILE: app/assets/components/Charts/Radar/index.js
================================================
import React, { Component } from 'react';
import { Chart, Tooltip, Geom, Coord, Axis } from 'bizcharts';
import { Row, Col } from 'antd';
import autoHeight from '../autoHeight';
import styles from './index.less';

/* eslint react/no-danger:0 */
@autoHeight()
export default class Radar extends Component {
  state = {
    legendData: [],
  };

  componentDidMount() {
    this.getLengendData();
  }

  componentWillReceiveProps(nextProps) {
    if (this.props.data !== nextProps.data) {
      this.getLengendData();
    }
  }

  getG2Instance = chart => {
    this.chart = chart;
  };

  // for custom lengend view
  getLengendData = () => {
    if (!this.chart) return;
    const geom = this.chart.getAllGeoms()[0]; // 获取所有的图形
    const items = geom.get('dataArray') || []; // 获取图形对应的

    const legendData = items.map(item => {
      // eslint-disable-next-line
      const origins = item.map(t => t._origin);
      const result = {
        name: origins[0].name,
        color: item[0].color,
        checked: true,
        value: origins.reduce((p, n) => p + n.value, 0),
      };

      return result;
    });

    this.setState({
      legendData,
    });
  };

  handleRef = n => {
    this.node = n;
  };

  handleLegendClick = (item, i) => {
    const newItem = item;
    newItem.checked = !newItem.checked;

    const { legendData } = this.state;
    legendData[i] = newItem;

    const filteredLegendData = legendData.filter(l => l.checked).map(l => l.name);

    if (this.chart) {
      this.chart.filter('name', val => filteredLegendData.indexOf(val) > -1);
      this.chart.repaint();
    }

    this.setState({
      legendData,
    });
  };

  render() {
    const defaultColors = [
      '#1890FF',
      '#FACC14',
      '#2FC25B',
      '#8543E0',
      '#F04864',
      '#13C2C2',
      '#fa8c16',
      '#a0d911',
    ];

    const {
      data = [],
      height = 0,
      title,
      hasLegend = false,
      forceFit = true,
      tickCount = 4,
      padding = [35, 30, 16, 30],
      animate = true,
      colors = defaultColors,
    } = this.props;

    const { legendData } = this.state;

    const scale = {
      value: {
        min: 0,
        tickCount,
      },
    };

    const chartHeight = height - (hasLegend ? 80 : 22);

    return (
      <div className={styles.radar} style={{ height }}>
        {title && <h4>{title}</h4>}
        <Chart
          scale={scale}
          height={chartHeight}
          forceFit={forceFit}
          data={data}
          padding={padding}
          animate={animate}
          onGetG2Instance={this.getG2Instance}
        >
          <Tooltip />
          <Coord type="polar" />
          <Axis
            name="label"
            line={null}
            tickLine={null}
            grid={{
              lineStyle: {
                lineDash: null,
              },
              hideFirstLine: false,
            }}
          />
          <Axis
            name="value"
            grid={{
              type: 'polygon',
              lineStyle: {
                lineDash: null,
              },
            }}
          />
          <Geom type="line" position="label*value" color={['name', colors]} size={1} />
          <Geom
            type="point"
            position="label*value"
            color={['name', colors]}
            shape="circle"
            size={3}
          />
        </Chart>
        {hasLegend && (
          <Row className={styles.legend}>
            {legendData.map((item, i) => (
              <Col
                span={24 / legendData.length}
                key={item.name}
                onClick={() => this.handleLegendClick(item, i)}
              >
                <div className={styles.legendItem}>
                  <p>
                    <span
                      className={styles.dot}
                      style={{
                        backgroundColor: !item.checked ? '#aaa' : item.color,
                      }}
                    />
                    <span>{item.name}</span>
                  </p>
                  <h6>{item.value}</h6>
                </div>
              </Col>
            ))}
          </Row>
        )}
      </div>
    );
  }
}


================================================
FILE: app/assets/components/Charts/Radar/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.radar {
  .legend {
    margin-top: 16px;
    .legendItem {
      position: relative;
      text-align: center;
      cursor: pointer;
      color: @text-color-secondary;
      line-height: 22px;
      p {
        margin: 0;
      }
      h6 {
        color: @heading-color;
        padding-left: 16px;
        font-size: 24px;
        line-height: 32px;
        margin-top: 4px;
        margin-bottom: 0;
      }
      &:after {
        background-color: @border-color-split;
        position: absolute;
        top: 8px;
        right: 0;
        height: 40px;
        width: 1px;
        content: '';
      }
    }
    > :last-child .legendItem:after {
      display: none;
    }
    .dot {
      border-radius: 6px;
      display: inline-block;
      margin-right: 6px;
      position: relative;
      top: -1px;
      height: 6px;
      width: 6px;
    }
  }
}


================================================
FILE: app/assets/components/Charts/TagCloud/index.d.ts
================================================
import * as React from 'react';
export interface ITagCloudProps {
  data: Array<{
    name: string;
    value: number;
  }>;
  height: number;
  style?: React.CSSProperties;
}

export default class TagCloud extends React.Component<ITagCloudProps, any> {}


================================================
FILE: app/assets/components/Charts/TagCloud/index.js
================================================
import React, { Component } from 'react';
import { Chart, Geom, Coord, Shape } from 'bizcharts';
import DataSet from '@antv/data-set';
import Debounce from 'lodash-decorators/debounce';
import Bind from 'lodash-decorators/bind';
import classNames from 'classnames';
import autoHeight from '../autoHeight';
import styles from './index.less';

/* eslint no-underscore-dangle: 0 */
/* eslint no-param-reassign: 0 */

const imgUrl = 'https://gw.alipayobjects.com/zos/rmsportal/gWyeGLCdFFRavBGIDzWk.png';

@autoHeight()
class TagCloud extends Component {
  state = {
    dv: null,
  };

  componentDidMount() {
    this.initTagCloud();
    this.renderChart();
    window.addEventListener('resize', this.resize);
  }

  componentWillReceiveProps(nextProps) {
    if (JSON.stringify(nextProps.data) !== JSON.stringify(this.props.data)) {
      this.renderChart(nextProps);
    }
  }

  componentWillUnmount() {
    this.isUnmount = true;
    window.removeEventListener('resize', this.resize);
  }

  resize = () => {
    this.renderChart();
  };

  saveRootRef = node => {
    this.root = node;
  };

  initTagCloud = () => {
    function getTextAttrs(cfg) {
      return Object.assign(
        {},
        {
          fillOpacity: cfg.opacity,
          fontSize: cfg.origin._origin.size,
          rotate: cfg.origin._origin.rotate,
          text: cfg.origin._origin.text,
          textAlign: 'center',
          fontFamily: cfg.origin._origin.font,
          fill: cfg.color,
          textBaseline: 'Alphabetic',
        },
        cfg.style
      );
    }

    // 给point注册一个词云的shape
    Shape.registerShape('point', 'cloud', {
      drawShape(cfg, container) {
        const attrs = getTextAttrs(cfg);
        return container.addShape('text', {
          attrs: Object.assign(attrs, {
            x: cfg.x,
            y: cfg.y,
          }),
        });
      },
    });
  };

  @Bind()
  @Debounce(500)
  renderChart(nextProps) {
    // const colors = ['#1890FF', '#41D9C7', '#2FC25B', '#FACC14', '#9AE65C'];
    const { data, height } = nextProps || this.props;

    if (data.length < 1 || !this.root) {
      return;
    }

    const h = height * 4;
    const w = this.root.offsetWidth * 4;

    const onload = () => {
      const dv = new DataSet.View().source(data);
      const range = dv.range('value');
      const [min, max] = range;
      dv.transform({
        type: 'tag-cloud',
        fields: ['name', 'value'],
        imageMask: this.imageMask,
        font: 'Verdana',
        size: [w, h], // 宽高设置最好根据 imageMask 做调整
        padding: 5,
        timeInterval: 5000, // max execute time
        rotate() {
          return 0;
        },
        fontSize(d) {
          // eslint-disable-next-line
          return Math.pow((d.value - min) / (max - min), 2) * (70 - 20) + 20;
        },
      });

      if (this.isUnmount) {
        return;
      }

      this.setState({
        dv,
        w,
        h,
      });
    };

    if (!this.imageMask) {
      this.imageMask = new Image();
      this.imageMask.crossOrigin = '';
      this.imageMask.src = imgUrl;

      this.imageMask.onload = onload;
    } else {
      onload();
    }
  }

  render() {
    const { className, height } = this.props;
    const { dv, w, h } = this.state;

    return (
      <div
        className={classNames(styles.tagCloud, className)}
        style={{ width: '100%', height }}
        ref={this.saveRootRef}
      >
        {dv && (
          <Chart
            width={w}
            height={h}
            data={dv}
            padding={0}
            scale={{
              x: { nice: false },
              y: { nice: false },
            }}
          >
            <Coord reflect="y" />
            <Geom type="point" position="x*y" color="text" shape="cloud" />
          </Chart>
        )}
      </div>
    );
  }
}

export default TagCloud;


================================================
FILE: app/assets/components/Charts/TagCloud/index.less
================================================
.tagCloud {
  overflow: hidden;
  canvas {
    transform: scale(0.25);
    transform-origin: 0 0;
  }
}


================================================
FILE: app/assets/components/Charts/TimelineChart/index.d.ts
================================================
import * as React from 'react';
export interface ITimelineChartProps {
  data: Array<{
    x: string;
    y1: string;
    y2: string;
  }>;
  titleMap: { y1: string; y2: string };
  padding?: [number, number, number, number];
  height?: number;
  style?: React.CSSProperties;
}

export default class TimelineChart extends React.Component<ITimelineChartProps, any> {}


================================================
FILE: app/assets/components/Charts/TimelineChart/index.js
================================================
import React from 'react';
import { Chart, Tooltip, Geom, Legend, Axis } from 'bizcharts';
import DataSet from '@antv/data-set';
import Slider from 'bizcharts-plugin-slider';
import autoHeight from '../autoHeight';
import styles from './index.less';

@autoHeight()
export default class TimelineChart extends React.Component {
  render() {
    const {
      title,
      height = 400,
      padding = [60, 20, 40, 40],
      titleMap = {
        y1: 'y1',
        y2: 'y2',
      },
      borderWidth = 2,
      data = [
        {
          x: 0,
          y1: 0,
          y2: 0,
        },
      ],
    } = this.props;

    data.sort((a, b) => a.x - b.x);

    let max;
    if (data[0] && data[0].y1 && data[0].y2) {
      max = Math.max(
        [...data].sort((a, b) => b.y1 - a.y1)[0].y1,
        [...data].sort((a, b) => b.y2 - a.y2)[0].y2
      );
    }

    const ds = new DataSet({
      state: {
        start: data[0].x,
        end: data[data.length - 1].x,
      },
    });

    const dv = ds.createView();
    dv
      .source(data)
      .transform({
        type: 'filter',
        callback: obj => {
          const date = obj.x;
          return date <= ds.state.end && date >= ds.state.start;
        },
      })
      .transform({
        type: 'map',
        callback(row) {
          const newRow = { ...row };
          newRow[titleMap.y1] = row.y1;
          newRow[titleMap.y2] = row.y2;
          return newRow;
        },
      })
      .transform({
        type: 'fold',
        fields: [titleMap.y1, titleMap.y2], // 展开字段集
        key: 'key', // key字段
        value: 'value', // value字段
      });

    const timeScale = {
      type: 'time',
      tickInterval: 60 * 60 * 1000,
      mask: 'HH:mm',
      range: [0, 1],
    };

    const cols = {
      x: timeScale,
      value: {
        max,
        min: 0,
      },
    };

    const SliderGen = () => (
      <Slider
        padding={[0, padding[1] + 20, 0, padding[3]]}
        width="auto"
        height={26}
        xAxis="x"
        yAxis="y1"
        scales={{ x: timeScale }}
        data={data}
        start={ds.state.start}
        end={ds.state.end}
        backgroundChart={{ type: 'line' }}
        onChange={({ startValue, endValue }) => {
          ds.setState('start', startValue);
          ds.setState('end', endValue);
        }}
      />
    );

    return (
      <div className={styles.timelineChart} style={{ height: height + 30 }}>
        <div>
          {title && <h4>{title}</h4>}
          <Chart height={height} padding={padding} data={dv} scale={cols} forceFit>
            <Axis name="x" />
            <Tooltip />
            <Legend name="key" position="top" />
            <Geom type="line" position="x*value" size={borderWidth} color="key" />
          </Chart>
          <div style={{ marginRight: -20 }}>
            <SliderGen />
          </div>
        </div>
      </div>
    );
  }
}


================================================
FILE: app/assets/components/Charts/TimelineChart/index.less
================================================
.timelineChart {
  background: #fff;
}


================================================
FILE: app/assets/components/Charts/WaterWave/index.d.ts
================================================
import * as React from 'react';
export interface IWaterWaveProps {
  title: React.ReactNode;
  color?: string;
  height: number;
  percent: number;
  style?: React.CSSProperties;
}

export default class WaterWave extends React.Component<IWaterWaveProps, any> {}


================================================
FILE: app/assets/components/Charts/WaterWave/index.js
================================================
import React, { PureComponent } from 'react';
import autoHeight from '../autoHeight';
import styles from './index.less';

/* eslint no-return-assign: 0 */
/* eslint no-mixed-operators: 0 */
// riddle: https://riddle.alibaba-inc.com/riddles/2d9a4b90

@autoHeight()
export default class WaterWave extends PureComponent {
  state = {
    radio: 1,
  };

  componentDidMount() {
    this.renderChart();
    this.resize();

    window.addEventListener('resize', this.resize);
  }

  componentWillUnmount() {
    cancelAnimationFrame(this.timer);
    if (this.node) {
      this.node.innerHTML = '';
    }
    window.removeEventListener('resize', this.resize);
  }

  resize = () => {
    const { height } = this.props;
    const { offsetWidth } = this.root.parentNode;
    this.setState({
      radio: offsetWidth < height ? offsetWidth / height : 1,
    });
  };

  renderChart() {
    const { percent, color = '#1890FF' } = this.props;
    const data = percent / 100;
    const self = this;

    if (!this.node || !data) {
      return;
    }

    const canvas = this.node;
    const ctx = canvas.getContext('2d');

    const canvasWidth = canvas.width;
    const canvasHeight = canvas.height;
    const radius = canvasWidth / 2;
    const lineWidth = 2;
    const cR = radius - lineWidth;

    ctx.beginPath();
    ctx.lineWidth = lineWidth * 2;

    const axisLength = canvasWidth - lineWidth;
    const unit = axisLength / 8;
    const range = 0.2; // 振幅
    let currRange = range;
    const xOffset = lineWidth;
    let sp = 0; // 周期偏移量
    let currData = 0;
    const waveupsp = 0.005; // 水波上涨速度

    let arcStack = [];
    const bR = radius - lineWidth;
    const circleOffset = -(Math.PI / 2);
    let circleLock = true;

    for (let i = circleOffset; i < circleOffset + 2 * Math.PI; i += 1 / (8 * Math.PI)) {
      arcStack.push([radius + bR * Math.cos(i), radius + bR * Math.sin(i)]);
    }

    const cStartPoint = arcStack.shift();
    ctx.strokeStyle = color;
    ctx.moveTo(cStartPoint[0], cStartPoint[1]);

    function drawSin() {
      ctx.beginPath();
      ctx.save();

      const sinStack = [];
      for (let i = xOffset; i <= xOffset + axisLength; i += 20 / axisLength) {
        const x = sp + (xOffset + i) / unit;
        const y = Math.sin(x) * currRange;
        const dx = i;
        const dy = 2 * cR * (1 - currData) + (radius - cR) - unit * y;

        ctx.lineTo(dx, dy);
        sinStack.push([dx, dy]);
      }

      const startPoint = sinStack.shift();

      ctx.lineTo(xOffset + axisLength, canvasHeight);
      ctx.lineTo(xOffset, canvasHeight);
      ctx.lineTo(startPoint[0], startPoint[1]);

      const gradient = ctx.createLinearGradient(0, 0, 0, canvasHeight);
      gradient.addColorStop(0, '#ffffff');
      gradient.addColorStop(1, '#1890FF');
      ctx.fillStyle = gradient;
      ctx.fill();
      ctx.restore();
    }

    function render() {
      ctx.clearRect(0, 0, canvasWidth, canvasHeight);
      if (circleLock) {
        if (arcStack.length) {
          const temp = arcStack.shift();
          ctx.lineTo(temp[0], temp[1]);
          ctx.stroke();
        } else {
          circleLock = false;
          ctx.lineTo(cStartPoint[0], cStartPoint[1]);
          ctx.stroke();
          arcStack = null;

          ctx.globalCompositeOperation = 'destination-over';
          ctx.beginPath();
          ctx.lineWidth = lineWidth;
          ctx.arc(radius, radius, bR, 0, 2 * Math.PI, 1);

          ctx.beginPath();
          ctx.save();
          ctx.arc(radius, radius, radius - 3 * lineWidth, 0, 2 * Math.PI, 1);

          ctx.restore();
          ctx.clip();
          ctx.fillStyle = '#1890FF';
        }
      } else {
        if (data >= 0.85) {
          if (currRange > range / 4) {
            const t = range * 0.01;
            currRange -= t;
          }
        } else if (data <= 0.1) {
          if (currRange < range * 1.5) {
            const t = range * 0.01;
            currRange += t;
          }
        } else {
          if (currRange <= range) {
            const t = range * 0.01;
            currRange += t;
          }
          if (currRange >= range) {
            const t = range * 0.01;
            currRange -= t;
          }
        }
        if (data - currData > 0) {
          currData += waveupsp;
        }
        if (data - currData < 0) {
          currData -= waveupsp;
        }

        sp += 0.07;
        drawSin();
      }
      self.timer = requestAnimationFrame(render);
    }

    render();
  }

  render() {
    const { radio } = this.state;
    const { percent, title, height } = this.props;
    return (
      <div
        className={styles.waterWave}
        ref={n => (this.root = n)}
        style={{ transform: `scale(${radio})` }}
      >
        <div style={{ width: height, height, overflow: 'hidden' }}>
          <canvas
            className={styles.waterWaveCanvasWrapper}
            ref={n => (this.node = n)}
            width={height * 2}
            height={height * 2}
          />
        </div>
        <div className={styles.text} style={{ width: height }}>
          {title && <span>{title}</span>}
          <h4>{percent}%</h4>
        </div>
      </div>
    );
  }
}


================================================
FILE: app/assets/components/Charts/WaterWave/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.waterWave {
  display: inline-block;
  position: relative;
  transform-origin: left;
  .text {
    position: absolute;
    left: 0;
    top: 32px;
    text-align: center;
    width: 100%;
    span {
      color: @text-color-secondary;
      font-size: 14px;
      line-height: 22px;
    }
    h4 {
      color: @heading-color;
      line-height: 32px;
      font-size: 24px;
    }
  }
  .waterWaveCanvasWrapper {
    transform: scale(0.5);
    transform-origin: 0 0;
  }
}


================================================
FILE: app/assets/components/Charts/autoHeight.js
================================================
/* eslint eqeqeq: 0 */
import React from 'react';

function computeHeight(node) {
  const totalHeight = parseInt(getComputedStyle(node).height, 10);
  const padding =
    parseInt(getComputedStyle(node).paddingTop, 10) +
    parseInt(getComputedStyle(node).paddingBottom, 10);
  return totalHeight - padding;
}

function getAutoHeight(n) {
  if (!n) {
    return 0;
  }

  let node = n;

  let height = computeHeight(node);

  while (!height) {
    node = node.parentNode;
    if (node) {
      height = computeHeight(node);
    } else {
      break;
    }
  }

  return height;
}

const autoHeight = () => WrappedComponent => {
  return class extends React.Component {
    state = {
      computedHeight: 0,
    };

    componentDidMount() {
      const { height } = this.props;
      if (!height) {
        const h = getAutoHeight(this.root);
        // eslint-disable-next-line
        this.setState({ computedHeight: h });
      }
    }

    handleRoot = node => {
      this.root = node;
    };

    render() {
      const { height } = this.props;
      const { computedHeight } = this.state;
      const h = height || computedHeight;
      return (
        <div ref={this.handleRoot}>{h > 0 && <WrappedComponent {...this.props} height={h} />}</div>
      );
    }
  };
};

export default autoHeight;


================================================
FILE: app/assets/components/Charts/demo/bar.md
================================================
---
order: 4
title: 柱状图
---

通过设置 `x`,`y` 属性,可以快速的构建出一个漂亮的柱状图,各种纬度的关系则是通过自定义的数据展现。

````jsx
import { Bar } from 'ant-design-pro/lib/Charts';

const salesData = [];
for (let i = 0; i < 12; i += 1) {
  salesData.push({
    x: `${i + 1}月`,
    y: Math.floor(Math.random() * 1000) + 200,
  });
}

ReactDOM.render(
  <Bar
    height={200}
    title="销售额趋势"
    data={salesData}
  />
, mountNode);
````


================================================
FILE: app/assets/components/Charts/demo/chart-card.md
================================================
---
order: 1
title: 图表卡片
---

用于展示图表的卡片容器,可以方便的配合其它图表套件展示丰富信息。

```jsx
import { ChartCard, yuan, Field } from 'ant-design-pro/lib/Charts';
import Trend from 'ant-design-pro/lib/Trend';
import { Row, Col, Icon, Tooltip } from 'antd';
import numeral from 'numeral';

ReactDOM.render(
  <Row>
    <Col span={24}>
      <ChartCard
        title="销售额"
        action={
          <Tooltip title="指标说明">
            <Icon type="info-circle-o" />
          </Tooltip>
        }
        total={() => (
          <span dangerouslySetInnerHTML={{ __html: yuan(126560) }} />
        )}
        footer={
          <Field label="日均销售额" value={numeral(12423).format("0,0")} />
        }
        contentHeight={46}
      >
        <span>
          周同比
          <Trend flag="up" style={{ marginLeft: 8, color: "rgba(0,0,0,.85)" }}>
            12%
          </Trend>
        </span>
        <span style={{ marginLeft: 16 }}>
          日环比
          <Trend
            flag="down"
            style={{ marginLeft: 8, color: "rgba(0,0,0,.85)" }}
          >
            11%
          </Trend>
        </span>
      </ChartCard>
    </Col>
    <Col span={24} style={{ marginTop: 24 }}>
      <ChartCard
        title="移动指标"
        avatar={
          <img
            style={{ width: 56, height: 56 }}
            src="https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png"
            alt="indicator"
          />
        }
        action={
          <Tooltip title="指标说明">
            <Icon type="info-circle-o" />
          </Tooltip>
        }
        total={() => (
          <span dangerouslySetInnerHTML={{ __html: yuan(126560) }} />
        )}
        footer={
          <Field label="日均销售额" value={numeral(12423).format("0,0")} />
        }
      />
    </Col>
    <Col span={24} style={{ marginTop: 24 }}>
      <ChartCard
        title="移动指标"
        avatar={
          <img
            alt="indicator"
            style={{ width: 56, height: 56 }}
            src="https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png"
          />
        }
        action={
          <Tooltip title="指标说明">
            <Icon type="info-circle-o" />
          </Tooltip>
        }
        total={() => (
          <span dangerouslySetInnerHTML={{ __html: yuan(126560) }} />
        )}
      />
    </Col>
  </Row>,
  mountNode,
);
```


================================================
FILE: app/assets/components/Charts/demo/gauge.md
================================================
---
order: 7
title: 仪表盘 
---

仪表盘是一种进度展示方式,可以更直观的展示当前的进展情况,通常也可表示占比。

````jsx
import { Gauge } from 'ant-design-pro/lib/Charts';

ReactDOM.render(
  <Gauge
    title="核销率"
    height={164}
    percent={87}
  />
, mountNode);
````


================================================
FILE: app/assets/components/Charts/demo/mini-area.md
================================================
---
order: 2
col: 2
title: 迷你区域图
---

````jsx
import { MiniArea } from 'ant-design-pro/lib/Charts';
import moment from 'moment';

const visitData = [];
const beginDay = new Date().getTime();
for (let i = 0; i < 20; i += 1) {
  visitData.push({
    x: moment(new Date(beginDay + (1000 * 60 * 60 * 24 * i))).format('YYYY-MM-DD'),
    y: Math.floor(Math.random() * 100) + 10,
  });
}

ReactDOM.render(
  <MiniArea
    line
    color="#cceafe"
    height={45}
    data={visitData}
  />
, mountNode);
````


================================================
FILE: app/assets/components/Charts/demo/mini-bar.md
================================================
---
order: 2
col: 2
title: 迷你柱状图
---

迷你柱状图更适合展示简单的区间数据,简洁的表现方式可以很好的减少大数据量的视觉展现压力。

````jsx
import { MiniBar } from 'ant-design-pro/lib/Charts';
import moment from 'moment';

const visitData = [];
const beginDay = new Date().getTime();
for (let i = 0; i < 20; i += 1) {
  visitData.push({
    x: moment(new Date(beginDay + (1000 * 60 * 60 * 24 * i))).format('YYYY-MM-DD'),
    y: Math.floor(Math.random() * 100) + 10,
  });
}

ReactDOM.render(
  <MiniBar
    height={45}
    data={visitData}
  />
, mountNode);
````


================================================
FILE: app/assets/components/Charts/demo/mini-pie.md
================================================
---
order: 6
title: 迷你饼状图
---

通过简化 `Pie` 属性的设置,可以快速的实现极简的饼状图,可配合 `ChartCard` 组合展
现更多业务场景。

```jsx
import { Pie } from 'ant-design-pro/lib/Charts';

ReactDOM.render(
  <Pie percent={28} subTitle="中式快餐" total="28%" height={140} />,
  mountNode
);
```


================================================
FILE: app/assets/components/Charts/demo/mini-progress.md
================================================
---
order: 3
title: 迷你进度条
---

````jsx
import { MiniProgress } from 'ant-design-pro/lib/Charts';

ReactDOM.render(
  <MiniProgress percent={78} strokeWidth={8} target={80} />
, mountNode);
````


================================================
FILE: app/assets/components/Charts/demo/mix.md
================================================
---
order: 0
title: 图表套件组合展示
---

利用 Ant Design Pro 提供的图表套件,可以灵活组合符合设计规范的图表来满足复杂的业务需求。

````jsx
import { ChartCard, Field, MiniArea, MiniBar, MiniProgress } from 'ant-design-pro/lib/Charts';
import Trend from 'ant-design-pro/lib/Trend';
import NumberInfo from 'ant-design-pro/lib/NumberInfo';
import { Row, Col, Icon, Tooltip } from 'antd';
import numeral from 'numeral';
import moment from 'moment';

const visitData = [];
const beginDay = new Date().getTime();
for (let i = 0; i < 20; i += 1) {
  visitData.push({
    x: moment(new Date(beginDay + (1000 * 60 * 60 * 24 * i))).format('YYYY-MM-DD'),
    y: Math.floor(Math.random() * 100) + 10,
  });
}

ReactDOM.render(
  <Row>
    <Col span={24}>
      <ChartCard
        title="搜索用户数量"
        total={numeral(8846).format('0,0')}
        contentHeight={134}
      >
        <NumberInfo
          subTitle={<span>本周访问</span>}
          total={numeral(12321).format('0,0')}
          status="up"
          subTotal={17.1}
        />
        <MiniArea
          line
          height={45}
          data={visitData}
        />
      </ChartCard>
    </Col>
    <Col span={24} style={{ marginTop: 24 }}>
      <ChartCard
        title="访问量"
        action={<Tooltip title="指标说明"><Icon type="info-circle-o" /></Tooltip>}
        total={numeral(8846).format('0,0')}
        footer={<Field label="日访问量" value={numeral(1234).format('0,0')} />}
        contentHeight={46}
      >
        <MiniBar
          height={46}
          data={visitData}
        />
      </ChartCard>
    </Col>
    <Col span={24} style={{ marginTop: 24 }}>
      <ChartCard
        title="线上购物转化率"
        action={<Tooltip title="指标说明"><Icon type="info-circle-o" /></Tooltip>}
        total="78%"
        footer={
          <div>
            <span>
              周同比
              <Trend flag="up" style={{ marginLeft: 8, color: 'rgba(0,0,0,.85)' }}>12%</Trend>
            </span>
            <span style={{ marginLeft: 16 }}>
              日环比
              <Trend flag="down" style={{ marginLeft: 8, color: 'rgba(0,0,0,.85)' }}>11%</Trend>
            </span>
          </div>
        }
        contentHeight={46}
      >
        <MiniProgress percent={78} strokeWidth={8} target={80} />
      </ChartCard>
    </Col>
  </Row>
, mountNode);
````


================================================
FILE: app/assets/components/Charts/demo/pie.md
================================================
---
order: 5
title: 饼状图
---

```jsx
import { Pie, yuan } from 'ant-design-pro/lib/Charts';

const salesPieData = [
  {
    x: '家用电器',
    y: 4544,
  },
  {
    x: '食用酒水',
    y: 3321,
  },
  {
    x: '个护健康',
    y: 3113,
  },
  {
    x: '服饰箱包',
    y: 2341,
  },
  {
    x: '母婴产品',
    y: 1231,
  },
  {
    x: '其他',
    y: 1231,
  },
];

ReactDOM.render(
  <Pie
    hasLegend
    title="销售额"
    subTitle="销售额"
    total={() => (
      <span
        dangerouslySetInnerHTML={{
          __html: yuan(salesPieData.reduce((pre, now) => now.y + pre, 0))
        }}
      />
    )}
    data={salesPieData}
    valueFormat={val => <span dangerouslySetInnerHTML={{ __html: yuan(val) }} />}
    height={294}
  />,
  mountNode,
);
```


================================================
FILE: app/assets/components/Charts/demo/radar.md
================================================
---
order: 7
title: 雷达图
---

````jsx
import { Radar, ChartCard } from 'ant-design-pro/lib/Charts';

const radarOriginData = [
  {
    name: '个人',
    ref: 10,
    koubei: 8,
    output: 4,
    contribute: 5,
    hot: 7,
  },
  {
    name: '团队',
    ref: 3,
    koubei: 9,
    output: 6,
    contribute: 3,
    hot: 1,
  },
  {
    name: '部门',
    ref: 4,
    koubei: 1,
    output: 6,
    contribute: 5,
    hot: 7,
  },
];
const radarData = [];
const radarTitleMap = {
  ref: '引用',
  koubei: '口碑',
  output: '产量',
  contribute: '贡献',
  hot: '热度',
};
radarOriginData.forEach((item) => {
  Object.keys(item).forEach((key) => {
    if (key !== 'name') {
      radarData.push({
        name: item.name,
        label: radarTitleMap[key],
        value: item[key],
      });
    }
  });
});

ReactDOM.render(
  <ChartCard title="数据比例">
    <Radar
      hasLegend
      height={286}
      data={radarData}
    />
  </ChartCard>
, mountNode);
````


================================================
FILE: app/assets/components/Charts/demo/tag-cloud.md
================================================
---
order: 9
title: 标签云
---

标签云是一套相关的标签以及与此相应的权重展示方式,一般典型的标签云有 30 至 150 个标签,而权重影响使用的字体大小或其他视觉效果。

````jsx
import { TagCloud } from 'ant-design-pro/lib/Charts';

const tags = [];
for (let i = 0; i < 50; i += 1) {
  tags.push({
    name: `TagClout-Title-${i}`,
    value: Math.floor((Math.random() * 50)) + 20,
  });
}

ReactDOM.render(
  <TagCloud
    data={tags}
    height={200}
  />
, mountNode);
````


================================================
FILE: app/assets/components/Charts/demo/timeline-chart.md
================================================
---
order: 9
title: 带有时间轴的图表
---

使用 `TimelineChart` 组件可以实现带有时间轴的柱状图展现,而其中的 `x` 属性,则是时间值的指向,默认最多支持同时展现两个指标,分别是 `y1` 和 `y2`。

````jsx
import { TimelineChart } from 'ant-design-pro/lib/Charts';

const chartData = [];
for (let i = 0; i < 20; i += 1) {
  chartData.push({
    x: (new Date().getTime()) + (1000 * 60 * 30 * i),
    y1: Math.floor(Math.random() * 100) + 1000,
    y2: Math.floor(Math.random() * 100) + 10,
  });
}

ReactDOM.render(
  <TimelineChart
    height={200}
    data={chartData}
    titleMap={{ y1: '客流量', y2: '支付笔数' }}
  />
, mountNode);
````


================================================
FILE: app/assets/components/Charts/demo/waterwave.md
================================================
---
order: 8
title: 水波图 
---

水波图是一种比例的展示方式,可以更直观的展示关键值的占比。

````jsx
import { WaterWave } from 'ant-design-pro/lib/Charts';

ReactDOM.render(
  <div style={{ textAlign: 'center' }}>
    <WaterWave
      height={161}
      title="补贴资金剩余"
      percent={34}
    />
  </div>
, mountNode);
````


================================================
FILE: app/assets/components/Charts/g2.js
================================================
// 全局 G2 设置
import { track, setTheme } from 'bizcharts';

track(false);

const config = {
  defaultColor: '#1089ff',
  shape: {
    interval: {
      fillOpacity: 1,
    },
  },
};

setTheme(config);


================================================
FILE: app/assets/components/Charts/index.d.ts
================================================
import * as numeral from 'numeral';
export { default as ChartCard } from './ChartCard';
export { default as Bar } from './Bar';
export { default as Pie } from './Pie';
export { default as Radar } from './Radar';
export { default as Gauge } from './Gauge';
export { default as MiniArea } from './MiniArea';
export { default as MiniBar } from './MiniBar';
export { default as MiniProgress } from './MiniProgress';
export { default as Field } from './Field';
export { default as WaterWave } from './WaterWave';
export { default as TagCloud } from './TagCloud';
export { default as TimelineChart } from './TimelineChart';

declare const yuan: (value: number | string) => string;

export { yuan };


================================================
FILE: app/assets/components/Charts/index.js
================================================
import numeral from 'numeral';
import './g2';
import ChartCard from './ChartCard';
import Bar from './Bar';
import Pie from './Pie';
import Radar from './Radar';
import Gauge from './Gauge';
import MiniArea from './MiniArea';
import MiniBar from './MiniBar';
import MiniProgress from './MiniProgress';
import Field from './Field';
import WaterWave from './WaterWave';
import TagCloud from './TagCloud';
import TimelineChart from './TimelineChart';

const yuan = val => `¥ ${numeral(val).format('0,0')}`;

const Charts = {
  yuan,
  Bar,
  Pie,
  Gauge,
  Radar,
  MiniBar,
  MiniArea,
  MiniProgress,
  ChartCard,
  Field,
  WaterWave,
  TagCloud,
  TimelineChart,
};

export {
  Charts as default,
  yuan,
  Bar,
  Pie,
  Gauge,
  Radar,
  MiniBar,
  MiniArea,
  MiniProgress,
  ChartCard,
  Field,
  WaterWave,
  TagCloud,
  TimelineChart,
};


================================================
FILE: app/assets/components/Charts/index.less
================================================
.miniChart {
  position: relative;
  width: 100%;
  .chartContent {
    position: absolute;
    bottom: -28px;
    width: 100%;
    > div {
      margin: 0 -5px;
      overflow: hidden;
    }
  }
  .chartLoading {
    position: absolute;
    top: 16px;
    left: 50%;
    margin-left: -7px;
  }
}


================================================
FILE: app/assets/components/Charts/index.md
================================================
---
title:
  en-US: Charts
  zh-CN: Charts
subtitle: 图表
order: 2
cols: 2
---

Ant Design Pro 提供的业务中常用的图表类型,都是基于 [G2](https://antv.alipay.com/g2/doc/index.html) 按照 Ant Design 图表规范封装,需要注意的是 Ant Design Pro 的图表组件以套件形式提供,可以任意组合实现复杂的业务需求。

因为结合了 Ant Design 的标准设计,本着极简的设计思想以及开箱即用的理念,简化了大量 API 配置,所以如果需要灵活定制图表,可以参考 Ant Design Pro 图表实现,自行基于 [G2](https://antv.alipay.com/g2/doc/index.html) 封装图表组件使用。

## API

### ChartCard

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| title | 卡片标题 | ReactNode\|string | - |
| action | 卡片操作 | ReactNode | - |
| total | 数据总量 | ReactNode \| number \| function | - |
| footer | 卡片底部 | ReactNode | - |
| contentHeight | 内容区域高度 | number | - |
| avatar | 右侧图标 | React.ReactNode | - |
### MiniBar

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| color | 图表颜色 | string | `#1890FF` |
| height | 图表高度 | number | - |
| data | 数据 | array<{x, y}> | - |

### MiniArea

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| color | 图表颜色 | string | `rgba(24, 144, 255, 0.2)` |
| borderColor | 图表边颜色 | string | `#1890FF` |
| height | 图表高度 | number | - |
| line | 是否显示描边 | boolean | false |
| animate | 是否显示动画 | boolean | true |
| xAxis | [x 轴配置](http://antvis.github.io/g2/doc/tutorial/start/axis.html) | object | - |
| yAxis | [y 轴配置](http://antvis.github.io/g2/doc/tutorial/start/axis.html) | object | - |
| data | 数据 | array<{x, y}> | - |

### MiniProgress

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| target | 目标比例 | number | - |
| color | 进度条颜色 | string | - |
| strokeWidth | 进度条高度 | number | - |
| percent | 进度比例 | number | - |

### Bar

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| title | 图表标题 | ReactNode\|string | - |
| color | 图表颜色 | string | `rgba(24, 144, 255, 0.85)` |
| padding | 图表内部间距 | [array](https://github.com/alibaba/BizCharts/blob/master/doc/api/chart.md#7padding-object--number--array-) | `'auto'` |
| height | 图表高度 | number | - |
| data | 数据 | array<{x, y}> | - |
| autoLabel | 在宽度不足时,自动隐藏 x 轴的 label | boolean | `true` |

### Pie

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| animate | 是否显示动画 | boolean | true |
| color | 图表颜色 | string | `rgba(24, 144, 255, 0.85)` |
| height | 图表高度 | number | - |
| hasLegend | 是否显示 legend | boolean | `false` |
| padding | 图表内部间距 | [array](https://github.com/alibaba/BizCharts/blob/master/doc/api/chart.md#7padding-object--number--array-) | `'auto'` |
| percent | 占比 | number | - |
| tooltip | 是否显示 tooltip | boolean | true |
| valueFormat | 显示值的格式化函数 | function | - |
| title | 图表标题 | ReactNode\|string | - |
| subTitle | 图表子标题 | ReactNode\|string | - |
| total | 图标中央的总数 | string | function | - |

### Radar

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| title | 图表标题 | ReactNode\|string | - |
| height | 图表高度 | number | - |
| hasLegend | 是否显示 legend | boolean | `false` |
| padding | 图表内部间距 | [array](https://github.com/alibaba/BizCharts/blob/master/doc/api/chart.md#7padding-object--number--array-) | `'auto'` |
| data | 图标数据 | array<{name,label,value}> | - |

### Gauge

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| title | 图表标题 | ReactNode\|string | - |
| height | 图表高度 | number | - |
| color | 图表颜色 | string | `#2F9CFF` |
| bgColor | 图表背景颜色 | string | `#F0F2F5` |
| percent | 进度比例 | number | - |

### WaterWave

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| title | 图表标题 | ReactNode\|string | - |
| height | 图表高度 | number | - |
| color | 图表颜色 | string | `#1890FF` |
| percent | 进度比例 | number | - |

### TagCloud

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| data | 标题 | Array<name, value\> | - |
| height | 高度值 | number | - |

### TimelineChart

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| data | 标题 | Array<x, y1, y2\> | - |
| titleMap | 指标别名 | Object{y1: '客流量', y2: '支付笔数'} | - |
| height | 高度值 | number | 400 |

### Field

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| label | 标题 | ReactNode\|string | - |
| value | 值 | ReactNode\|string | - |


================================================
FILE: app/assets/components/CountDown/demo/simple.md
================================================
---
order: 0
title:
  zh-CN: 基本
  en-US: Basic
---

## zh-CN

简单的倒计时组件使用。

## en-US

The simplest usage.

````jsx
import CountDown from 'ant-design-pro/lib/CountDown';

const targetTime = new Date().getTime() + 3900000;

ReactDOM.render(
  <CountDown style={{ fontSize: 20 }} target={targetTime} />
, mountNode);
````


================================================
FILE: app/assets/components/CountDown/index.d.ts
================================================
import * as React from 'react';
export interface ICountDownProps {
  format?: (time: number) => void;
  target: Date | number;
  onEnd?: () => void;
  style?: React.CSSProperties;
}

export default class CountDown extends React.Component<ICountDownProps, any> {}


================================================
FILE: app/assets/components/CountDown/index.en-US.md
================================================
---
title: CountDown
cols: 1
order: 3
---

Simple CountDown Component.

## API

| Property | Description | Type | Default |
|----------|------------------------------------------|-------------|-------|
| format | Formatter of time | Function(time) |  |
| target | Target time | Date | - |
| onEnd |  Countdown to the end callback | funtion | -|


================================================
FILE: app/assets/components/CountDown/index.js
================================================
import React, { Component } from 'react';

function fixedZero(val) {
  return val * 1 < 10 ? `0${val}` : val;
}

class CountDown extends Component {
  constructor(props) {
    super(props);

    const { lastTime } = this.initTime(props);

    this.state = {
      lastTime,
    };
  }

  componentDidMount() {
    this.tick();
  }

  componentWillReceiveProps(nextProps) {
    if (this.props.target !== nextProps.target) {
      clearTimeout(this.timer);
      const { lastTime } = this.initTime(nextProps);
      this.setState(
        {
          lastTime,
        },
        () => {
          this.tick();
        }
      );
    }
  }

  componentWillUnmount() {
    clearTimeout(this.timer);
  }

  timer = 0;
  interval = 1000;
  initTime = props => {
    let lastTime = 0;
    let targetTime = 0;
    try {
      if (Object.prototype.toString.call(props.target) === '[object Date]') {
        targetTime = props.target.getTime();
      } else {
        targetTime = new Date(props.target).getTime();
      }
    } catch (e) {
      throw new Error('invalid target prop', e);
    }

    lastTime = targetTime - new Date().getTime();
    return {
      lastTime: lastTime < 0 ? 0 : lastTime,
    };
  };
  // defaultFormat = time => (
  //  <span>{moment(time).format('hh:mm:ss')}</span>
  // );
  defaultFormat = time => {
    const hours = 60 * 60 * 1000;
    const minutes = 60 * 1000;

    const h = Math.floor(time / hours);
    const m = Math.floor((time - h * hours) / minutes);
    const s = Math.floor((time - h * hours - m * minutes) / 1000);
    return (
      <span>
        {fixedZero(h)}:{fixedZero(m)}:{fixedZero(s)}
      </span>
    );
  };
  tick = () => {
    const { onEnd } = this.props;
    let { lastTime } = this.state;

    this.timer = setTimeout(() => {
      if (lastTime < this.interval) {
        clearTimeout(this.timer);
        this.setState(
          {
            lastTime: 0,
          },
          () => {
            if (onEnd) {
              onEnd();
            }
          }
        );
      } else {
        lastTime -= this.interval;
        this.setState(
          {
            lastTime,
          },
          () => {
            this.tick();
          }
        );
      }
    }, this.interval);
  };

  render() {
    const { format = this.defaultFormat, onEnd, ...rest } = this.props;
    const { lastTime } = this.state;
    const result = format(lastTime);

    return <span {...rest}>{result}</span>;
  }
}

export default CountDown;


================================================
FILE: app/assets/components/CountDown/index.zh-CN.md
================================================
---
title: CountDown 
subtitle: 倒计时
cols: 1
order: 3
---

倒计时组件。

## API

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| format | 时间格式化显示 | Function(time) |  |
| target | 目标时间 | Date | - |
| onEnd |  倒计时结束回调 | funtion | -|


================================================
FILE: app/assets/components/DescriptionList/Description.d.ts
================================================
import * as React from 'react';

export default class Description extends React.Component<
  {
    term: React.ReactNode;
    style?: React.CSSProperties;
  },
  any
> {}


================================================
FILE: app/assets/components/DescriptionList/Description.js
================================================
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import { Col } from 'antd';
import styles from './index.less';
import responsive from './responsive';

const Description = ({ term, column, className, children, ...restProps }) => {
  const clsString = classNames(styles.description, className);
  return (
    <Col className={clsString} {...responsive[column]} {...restProps}>
      {term && <div className={styles.term}>{term}</div>}
      {children && <div className={styles.detail}>{children}</div>}
    </Col>
  );
};

Description.defaultProps = {
  term: '',
};

Description.propTypes = {
  term: PropTypes.node,
};

export default Description;


================================================
FILE: app/assets/components/DescriptionList/DescriptionList.js
================================================
import React from 'react';
import classNames from 'classnames';
import { Row } from 'antd';
import styles from './index.less';

const DescriptionList = ({
  className,
  title,
  col = 3,
  layout = 'horizontal',
  gutter = 32,
  children,
  size,
  ...restProps
}) => {
  const clsString = classNames(styles.descriptionList, styles[layout], className, {
    [styles.small]: size === 'small',
    [styles.large]: size === 'large',
  });
  const column = col > 4 ? 4 : col;
  return (
    <div className={clsString} {...restProps}>
      {title ? <div className={styles.title}>{title}</div> : null}
      <Row gutter={gutter}>
        {React.Children.map(children, child => child ? React.cloneElement(child, { column }) : child)}
      </Row>
    </div>
  );
};

export default DescriptionList;


================================================
FILE: app/assets/components/DescriptionList/demo/basic.md
================================================
---
order: 0
title:
  zh-CN: 基本
  en-US: Basic
---

## zh-CN

基本描述列表。

## en-US

Basic DescriptionList.

````jsx
import DescriptionList from 'ant-design-pro/lib/DescriptionList';

const { Description } = DescriptionList;

ReactDOM.render(
  <DescriptionList size="large" title="title">
    <Description term="Firefox">
      A free, open source, cross-platform,
      graphical web browser developed by the
      Mozilla Corporation and hundreds of
      volunteers.
    </Description>
    <Description term="Firefox">
      A free, open source, cross-platform,
      graphical web browser developed by the
      Mozilla Corporation and hundreds of
      volunteers.
    </Description>
    <Description term="Firefox">
      A free, open source, cross-platform,
      graphical web browser developed by the
      Mozilla Corporation and hundreds of
      volunteers.
    </Description>
  </DescriptionList>
, mountNode);
````


================================================
FILE: app/assets/components/DescriptionList/demo/vertical.md
================================================
---
order: 1
title:
  zh-CN: 垂直型
  en-US: Vertical
---

## zh-CN

垂直布局。

## en-US

Vertical layout.

````jsx
import DescriptionList from 'ant-design-pro/lib/DescriptionList';

const { Description } = DescriptionList;

ReactDOM.render(
  <DescriptionList size="large" title="title" layout="vertical">
    <Description term="Firefox">
      A free, open source, cross-platform,
      graphical web browser developed by the
      Mozilla Corporation and hundreds of
      volunteers.
    </Description>
    <Description term="Firefox">
      A free, open source, cross-platform,
      graphical web browser developed by the
      Mozilla Corporation and hundreds of
      volunteers.
    </Description>
    <Description term="Firefox">
      A free, open source, cross-platform,
      graphical web browser developed by the
      Mozilla Corporation and hundreds of
      volunteers.
    </Description>
  </DescriptionList>
, mountNode);
````


================================================
FILE: app/assets/components/DescriptionList/index.d.ts
================================================
import * as React from 'react';
import Description from './Description';

export interface IDescriptionListProps {
  layout?: 'horizontal' | 'vertical';
  col?: number;
  title: React.ReactNode;
  gutter?: number;
  size?: 'large' | 'small';
  style?: React.CSSProperties;
}

export default class DescriptionList extends React.Component<IDescriptionListProps, any> {
  public static Description: typeof Description;
}


================================================
FILE: app/assets/components/DescriptionList/index.en-US.md
================================================
---
title: DescriptionList
cols: 1
order: 4
---

Groups display multiple read-only fields, which are common to informational displays on detail pages.

## API

### DescriptionList

| Property      | Description                         | Type        | Default |
|----------|------------------------------------------|-------------|---------|
| layout    | type of layout                          | Enum{'horizontal', 'vertical'}  | 'horizontal' |
| col       | specify the maximum number of columns to display, the final columns number is determined by col setting combined with [Responsive Rules](/components/DescriptionList#Responsive-Rules)             | number(0 < col <= 4)  | 3 |
| title     | title                                 | ReactNode  | - |
| gutter    | specify the distance between two items, unit is `px`  | number  | 32 |
| size     | size of list       | Enum{'large', 'small'}  | - |

#### Responsive Rules

| Window Width        | Columns Number                             | 
|---------------------|---------------------------------------------|
| `≥768px`           |  `col`                                       |
| `≥576px`           |  `col < 2 ? col : 2`                         |
| `<576px`           |  `1`                                         |

### DescriptionList.Description

| Property | Description                                      | Type         | Default |
|----------|------------------------------------------|-------------|-------|
| term     | item title                                 | ReactNode  | - |


================================================
FILE: app/assets/components/DescriptionList/index.js
================================================
import DescriptionList from './DescriptionList';
import Description from './Description';

DescriptionList.Description = Description;
export default DescriptionList;


================================================
FILE: app/assets/components/DescriptionList/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.descriptionList {
  // offset the padding-bottom of last row
  :global {
    .ant-row {
      margin-bottom: -16px;
      overflow: hidden;
    }
  }

  .title {
    font-size: 14px;
    color: @heading-color;
    font-weight: 500;
    margin-bottom: 16px;
  }

  .term {
    // Line-height is 22px IE dom height will calculate error
    line-height: 20px;
    padding-bottom: 16px;
    margin-right: 8px;
    color: @heading-color;
    white-space: nowrap;
    display: table-cell;

    &:after {
      content: ':';
      margin: 0 8px 0 2px;
      position: relative;
      top: -0.5px;
    }
  }

  .detail {
    line-height: 22px;
    width: 100%;
    padding-bottom: 16px;
    color: @text-color;
    display: table-cell;
  }

  &.small {
    // offset the padding-bottom of last row
    :global {
      .ant-row {
        margin-bottom: -8px;
      }
    }
    .title {
      margin-bottom: 12px;
      color: @text-color;
    }
    .term,
    .detail {
      padding-bottom: 8px;
    }
  }

  &.large {
    .title {
      font-size: 16px;
    }
  }

  &.vertical {
    .term {
      padding-bottom: 8px;
      display: block;
    }

    .detail {
      display: block;
    }
  }
}


================================================
FILE: app/assets/components/DescriptionList/index.zh-CN.md
================================================
---
title: DescriptionList
subtitle: 描述列表
cols: 1
order: 4
---

成组展示多个只读字段,常见于详情页的信息展示。

## API

### DescriptionList

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| layout    | 布局方式                                 | Enum{'horizontal', 'vertical'}  | 'horizontal' |
| col       | 指定信息最多分几列展示,最终一行几列由 col 配置结合[响应式规则](/components/DescriptionList#响应式规则)决定          | number(0 < col <= 4)  | 3 |
| title     | 列表标题                                 | ReactNode  | - |
| gutter    | 列表项间距,单位为 `px`                    | number  | 32 |
| size     | 列表型号        | Enum{'large', 'small'}  | - |

#### 响应式规则

| 窗口宽度             | 展示列数                                      | 
|---------------------|---------------------------------------------|
| `≥768px`           |  `col`                                       |
| `≥576px`           |  `col < 2 ? col : 2`                         |
| `<576px`           |  `1`                                         |

### DescriptionList.Description

| 参数      | 说明                                      | 类型         | 默认值 |
|----------|------------------------------------------|-------------|-------|
| term     | 列表项标题                                 | ReactNode  | - |





================================================
FILE: app/assets/components/DescriptionList/responsive.js
================================================
export default {
  1: { xs: 24 },
  2: { xs: 24, sm: 12 },
  3: { xs: 24, sm: 12, md: 8 },
  4: { xs: 24, sm: 12, md: 6 },
};


================================================
FILE: app/assets/components/EditableItem/index.js
================================================
import React, { PureComponent } from 'react';
import { Input, Icon } from 'antd';
import styles from './index.less';

export default class EditableItem extends PureComponent {
  state = {
    value: this.props.value,
    editable: false,
  };
  handleChange = e => {
    const { value } = e.target;
    this.setState({ value });
  };
  check = () => {
    this.setState({ editable: false });
    if (this.props.onChange) {
      this.props.onChange(this.state.value);
    }
  };
  edit = () => {
    this.setState({ editable: true });
  };
  render() {
    const { value, editable } = this.state;
    return (
      <div className={styles.editableItem}>
        {editable ? (
          <div className={styles.wrapper}>
            <Input value={value} onChange={this.handleChange} onPressEnter={this.check} />
            <Icon type="check" className={styles.icon} onClick={this.check} />
          </div>
        ) : (
          <div className={styles.wrapper}>
            <span>{value || ' '}</span>
            <Icon type="edit" className={styles.icon} onClick={this.edit} />
          </div>
        )}
      </div>
    );
  }
}


================================================
FILE: app/assets/components/EditableItem/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.editableItem {
  line-height: @input-height-base;
  display: table;
  width: 100%;
  margin-top: (@font-size-base * @line-height-base - @input-height-base) / 2;

  .wrapper {
    display: table-row;

    & > * {
      display: table-cell;
    }

    & > *:first-child {
      width: 85%;
    }

    .icon {
      cursor: pointer;
      text-align: right;
    }
  }
}


================================================
FILE: app/assets/components/EditableLinkGroup/index.js
================================================
import React, { PureComponent, createElement } from 'react';
import PropTypes from 'prop-types';
import { Button } from 'antd';
import styles from './index.less';

// TODO: 添加逻辑

class EditableLinkGroup extends PureComponent {
  static defaultProps = {
    links: [],
    onAdd: () => {},
    linkElement: 'a',
  };

  static propTypes = {
    links: PropTypes.array,
    onAdd: PropTypes.func,
    linkElement: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
  };

  render() {
    const { links, linkElement, onAdd } = this.props;
    return (
      <div className={styles.linkGroup}>
        {links.map(link =>
          createElement(
            linkElement,
            {
              key: `linkGroup-item-${link.id || link.title}`,
              to: link.href,
              href: link.href,
            },
            link.title
          )
        )}
        {
          <Button size="small" type="primary" ghost onClick={onAdd} icon="plus">
            添加
          </Button>
        }
      </div>
    );
  }
}

export default EditableLinkGroup;


================================================
FILE: app/assets/components/EditableLinkGroup/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.linkGroup {
  padding: 20px 0 8px 24px;
  font-size: 0;
  & > a {
    color: @text-color;
    display: inline-block;
    font-size: @font-size-base;
    margin-bottom: 13px;
    width: 25%;
    &:hover {
      color: @primary-color;
    }
  }
}


================================================
FILE: app/assets/components/Ellipsis/demo/line.md
================================================
---
order: 1
title: 
  zh-CN: 按照行数省略
  en-US: Truncate according to the number of rows
---

## zh-CN

通过设置 `lines` 属性指定最大行数,如果超过这个行数的文本会自动截取。但是在这种模式下所有 `children` 将会被转换成纯文本。

并且注意在这种模式下,外容器需要有指定的宽度(或设置自身宽度)。

## en-US

`lines` attribute specifies the maximum number of rows where the text will automatically be truncated when exceeded. In this mode, all children will be converted to plain text.

Also note that, in this mode, the outer container needs to have a specified width (or set its own width).


````jsx
import Ellipsis from 'ant-design-pro/lib/Ellipsis';

const article = <p>There were injuries alleged in three <a href="#cover">cases in 2015</a>, and a fourth incident in September, according to the safety recall report. After meeting with US regulators in October, the firm decided to issue a voluntary recall.</p>;

ReactDOM.render(
  <div style={{ width: 200 }}>
    <Ellipsis tooltip lines={3}>{article}</Ellipsis>
  </div>
, mountNode);
````


================================================
FILE: app/assets/components/Ellipsis/demo/number.md
================================================
---
order: 0
title: 
  zh-CN: 按照字符数省略
  en-US: Truncate according to the number of character
---

## zh-CN

通过设置 `length` 属性指定文本最长长度,如果超过这个长度会自动截取。

## en-US

`length` attribute specifies the maximum length where the text will automatically be truncated when exceeded.

````jsx
import Ellipsis from 'ant-design-pro/lib/Ellipsis';

const article = 'There were injuries alleged in three cases in 2015, and a fourth incident in September, according to the safety recall report. After meeting with US regulators in October, the firm decided to issue a voluntary recall.';

ReactDOM.render(
  <div>
    <Ellipsis length={100}>{article}</Ellipsis>
    <h4 style={{ marginTop: 24 }}>Show Tooltip</h4>
    <Ellipsis length={100} tooltip>{article}</Ellipsis>
  </div>
, mountNode);
````


================================================
FILE: app/assets/components/Ellipsis/index.d.ts
================================================
import * as React from 'react';
export interface IEllipsisProps {
  tooltip?: boolean;
  length?: number;
  lines?: number;
  style?: React.CSSProperties;
  className?: string;
}

export default class Ellipsis extends React.Component<IEllipsisProps, any> {}


================================================
FILE: app/assets/components/Ellipsis/index.en-US.md
================================================
---
title: Ellipsis 
cols: 1
order: 10
---

When the text is too long, the Ellipsis automatically shortens it according to its length or the maximum number of lines.

## API

Property | Description | Type | Default
----|------|-----|------
tooltip | tooltip for showing the full text content when hovering over | boolean | -
length | 	maximum number of characters in the text before being truncated | number | -
lines | maximum number of rows in the text before being truncated | number | `1`


================================================
FILE: app/assets/components/Ellipsis/index.js
================================================
import React, { Component } from 'react';
import { Tooltip } from 'antd';
import classNames from 'classnames';
import styles from './index.less';

/* eslint react/no-did-mount-set-state: 0 */
/* eslint no-param-reassign: 0 */

const isSupportLineClamp = document.body.style.webkitLineClamp !== undefined;

const EllipsisText = ({ text, length, tooltip, ...other }) => {
  if (typeof text !== 'string') {
    throw new Error('Ellipsis children must be string.');
  }
  if (text.length <= length || length < 0) {
    return <span {...other}>{text}</span>;
  }
  const tail = '...';
  let displayText;
  if (length - tail.length <= 0) {
    displayText = '';
  } else {
    displayText = text.slice(0, length - tail.length);
  }

  if (tooltip) {
    return (
      <Tooltip overlayStyle={{ wordBreak: 'break-all' }} title={text}>
        <span>
          {displayText}
          {tail}
        </span>
      </Tooltip>
    );
  }

  return (
    <span {...other}>
      {displayText}
      {tail}
    </span>
  );
};

export default class Ellipsis extends Component {
  state = {
    text: '',
    targetCount: 0,
  };

  componentDidMount() {
    if (this.node) {
      this.computeLine();
    }
  }

  componentWillReceiveProps(nextProps) {
    if (this.props.lines !== nextProps.lines) {
      this.computeLine();
    }
  }

  computeLine = () => {
    const { lines } = this.props;
    if (lines && !isSupportLineClamp) {
      const text = this.shadowChildren.innerText;
      const lineHeight = parseInt(getComputedStyle(this.root).lineHeight, 10);
      const targetHeight = lines * lineHeight;
      this.content.style.height = `${targetHeight}px`;
      const totalHeight = this.shadowChildren.offsetHeight;
      const shadowNode = this.shadow.firstChild;

      if (totalHeight <= targetHeight) {
        this.setState({
          text,
          targetCount: text.length,
        });
        return;
      }

      // bisection
      const len = text.length;
      const mid = Math.floor(len / 2);

      const count = this.bisection(targetHeight, mid, 0, len, text, shadowNode);

      this.setState({
        text,
        targetCount: count,
      });
    }
  };

  bisection = (th, m, b, e, text, shadowNode) => {
    const suffix = '...';
    let mid = m;
    let end = e;
    let begin = b;
    shadowNode.innerHTML = text.substring(0, mid) + suffix;
    let sh = shadowNode.offsetHeight;

    if (sh <= th) {
      shadowNode.innerHTML = text.substring(0, mid + 1) + suffix;
      sh = shadowNode.offsetHeight;
      if (sh > th) {
        return mid;
      } else {
        begin = mid;
        mid = Math.floor((end - begin) / 2) + begin;
        return this.bisection(th, mid, begin, end, text, shadowNode);
      }
    } else {
      if (mid - 1 < 0) {
        return mid;
      }
      shadowNode.innerHTML = text.substring(0, mid - 1) + suffix;
      sh = shadowNode.offsetHeight;
      if (sh <= th) {
        return mid - 1;
      } else {
        end = mid;
        mid = Math.floor((end - begin) / 2) + begin;
        return this.bisection(th, mid, begin, end, text, shadowNode);
      }
    }
  };

  handleRoot = n => {
    this.root = n;
  };

  handleContent = n => {
    this.content = n;
  };

  handleNode = n => {
    this.node = n;
  };

  handleShadow = n => {
    this.shadow = n;
  };

  handleShadowChildren = n => {
    this.shadowChildren = n;
  };

  render() {
    const { text, targetCount } = this.state;
    const { children, lines, length, className, tooltip, ...restProps } = this.props;

    const cls = classNames(styles.ellipsis, className, {
      [styles.lines]: lines && !isSupportLineClamp,
      [styles.lineClamp]: lines && isSupportLineClamp,
    });

    if (!lines && !length) {
      return (
        <span className={cls} {...restProps}>
          {children}
        </span>
      );
    }

    // length
    if (!lines) {
      return (
        <EllipsisText
          className={cls}
          length={length}
          text={children || ''}
          tooltip={tooltip}
          {...restProps}
        />
      );
    }

    const id = `antd-pro-ellipsis-${`${new Date().getTime()}${Math.floor(Math.random() * 100)}`}`;

    // support document.body.style.webkitLineClamp
    if (isSupportLineClamp) {
      const style = `#${id}{-webkit-line-clamp:${lines};-webkit-box-orient: vertical;}`;
      return (
        <div id={id} className={cls} {...restProps}>
          <style>{style}</style>
          {tooltip ? (
            <Tooltip overlayStyle={{ wordBreak: 'break-all' }} title={children}>
              {children}
            </Tooltip>
          ) : (
            children
          )}
        </div>
      );
    }

    const childNode = (
      <span ref={this.handleNode}>
        {targetCount > 0 && text.substring(0, targetCount)}
        {targetCount > 0 && targetCount < text.length && '...'}
      </span>
    );

    return (
      <div {...restProps} ref={this.handleRoot} className={cls}>
        <div ref={this.handleContent}>
          {tooltip ? (
            <Tooltip overlayStyle={{ wordBreak: 'break-all' }} title={text}>
              {childNode}
            </Tooltip>
          ) : (
            childNode
          )}
          <div className={styles.shadow} ref={this.handleShadowChildren}>
            {children}
          </div>
          <div className={styles.shadow} ref={this.handleShadow}>
            <span>{text}</span>
          </div>
        </div>
      </div>
    );
  }
}


================================================
FILE: app/assets/components/Ellipsis/index.less
================================================
.ellipsis {
  overflow: hidden;
  display: inline-block;
  word-break: break-all;
  width: 100%;
}

.lines {
  position: relative;
  .shadow {
    display: block;
    position: relative;
    color: transparent;
    opacity: 0;
    z-index: -999;
  }
}

.lineClamp {
  position: relative;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
}


================================================
FILE: app/assets/components/Ellipsis/index.zh-CN.md
================================================
---
title: Ellipsis
subtitle: 文本自动省略号
cols: 1
order: 10
---

文本过长自动处理省略号,支持按照文本长度和最大行数两种方式截取。

## API

参数 | 说明 | 类型 | 默认值
----|------|-----|------
tooltip | 移动到文本展示完整内容的提示 | boolean | -
length | 在按照长度截取下的文本最大字符数,超过则截取省略 | number | -
lines | 在按照行数截取下最大的行数,超过则截取省略 | number | `1`


================================================
FILE: app/assets/components/Exception/demo/403.md
================================================
---
order: 2
title:
  zh-CN: 403
  en-US: 403
---

## zh-CN

403 页面,配合自定义操作。

## en-US

403 page with custom operations.

````jsx
import Exception from 'ant-design-pro/lib/Exception';
import { Button } from 'antd';

const actions = (
  <div>
    <Button type="primary">Home</Button>
    <Button>Detail</Button>
  </div>
);
ReactDOM.render(
  <Exception type="403" actions={actions} />
, mountNode);
````


================================================
FILE: app/assets/components/Exception/demo/404.md
================================================
---
order: 0
title:
  zh-CN: 404
  en-US: 404
---

## zh-CN

404 页面。

## en-US

404 page.

````jsx
import Exception from 'ant-design-pro/lib/Exception';

ReactDOM.render(
  <Exception type="404" />
, mountNode);
````


================================================
FILE: app/assets/components/Exception/demo/500.md
================================================
---
order: 1
title:
  zh-CN: 500
  en-US: 500
---

## zh-CN

500 页面。

## en-US

500 page.

````jsx
import Exception from 'ant-design-pro/lib/Exception';

ReactDOM.render(
  <Exception type="500" />
, mountNode);
````


================================================
FILE: app/assets/components/Exception/index.d.ts
================================================
import * as React from 'react';
export interface IExceptionProps {
  type?: '403' | '404' | '500';
  title?: React.ReactNode;
  desc?: React.ReactNode;
  img?: string;
  actions?: React.ReactNode;
  linkElement?: React.ReactNode;
  style?: React.CSSProperties;
}

export default class Exception extends React.Component<IExceptionProps, any> {}


================================================
FILE: app/assets/components/Exception/index.en-US.md
================================================
---
title: Exception
cols: 1
order: 5
---

Exceptions page is used to provide feedback on specific abnormal state. Usually, it contains an explanation of the error status, and provides users with suggestions or operations, to prevent users from feeling lost and confused.

## API

Property | Description | Type | Default
---------|-------------|------|--------
type | type of exception, the corresponding default `title`, `desc`, `img` will be given if set, which can be overridden by explicit setting of `title`, `desc`, `img` | Enum {'403', '404', '500'} | -
title | title | ReactNode | -
desc | supplementary description | ReactNode | -
img | the url of background image | string | -
actions | suggested operations, a default 'Home' link will show if not set | ReactNode | -
linkElement | to specify the element of link | string\|ReactElement | 'a'

================================================
FILE: app/assets/components/Exception/index.js
================================================
import React, { createElement } from 'react';
import classNames from 'classnames';
import { Button } from 'antd';
import config from './typeConfig';
import styles from './index.less';

const Exception = ({ className, linkElement = 'a', type, title, desc, img, actions, ...rest }) => {
  const pageType = type in config ? type : '404';
  const clsString = classNames(styles.exception, className);
  return (
    <div className={clsString} {...rest}>
      <div className={styles.imgBlock}>
        <div
          className={styles.imgEle}
          style={{ backgroundImage: `url(${img || config[pageType].img})` }}
        />
      </div>
      <div className={styles.content}>
        <h1>{title || config[pageType].title}</h1>
        <div className={styles.desc}>{desc || config[pageType].desc}</div>
        <div className={styles.actions}>
          {actions ||
            createElement(
              linkElement,
              {
                to: '/',
                href: '/',
              },
              <Button type="primary">返回首页</Button>
            )}
        </div>
      </div>
    </div>
  );
};

export default Exception;


================================================
FILE: app/assets/components/Exception/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.exception {
  display: flex;
  align-items: center;
  height: 100%;

  .imgBlock {
    flex: 0 0 62.5%;
    width: 62.5%;
    padding-right: 152px;
    zoom: 1;
    &:before,
    &:after {
      content: ' ';
      display: table;
    }
    &:after {
      clear: both;
      visibility: hidden;
      font-size: 0;
      height: 0;
    }
  }

  .imgEle {
    height: 360px;
    width: 100%;
    max-width: 430px;
    float: right;
    background-repeat: no-repeat;
    background-position: 50% 50%;
    background-size: contain;
  }

  .content {
    flex: auto;

    h1 {
      color: #434e59;
      font-size: 72px;
      font-weight: 600;
      line-height: 72px;
      margin-bottom: 24px;
    }

    .desc {
      color: @text-color-secondary;
      font-size: 20px;
      line-height: 28px;
      margin-bottom: 16px;
    }

    .actions {
      button:not(:last-child) {
        margin-right: 8px;
      }
    }
  }
}

@media screen and (max-width: @screen-xl) {
  .exception {
    .imgBlock {
      padding-right: 88px;
    }
  }
}

@media screen and (max-width: @screen-sm) {
  .exception {
    display: block;
    text-align: center;
    .imgBlock {
      padding-right: 0;
      margin: 0 auto 24px;
    }
  }
}

@media screen and (max-width: @screen-xs) {
  .exception {
    .imgBlock {
      margin-bottom: -24px;
      overflow: hidden;
    }
  }
}


================================================
FILE: app/assets/components/Exception/index.zh-CN.md
================================================
---
title: Exception
subtitle: 异常
cols: 1
order: 5
---

异常页用于对页面特定的异常状态进行反馈。通常,它包含对错误状态的阐述,并向用户提供建议或操作,避免用户感到迷失和困惑。

## API

| 参数         | 说明                                      | 类型         | 默认值 |
|-------------|------------------------------------------|-------------|-------|
| type        | 页面类型,若配置,则自带对应类型默认的 `title`,`desc`,`img`,此默认设置可以被 `title`,`desc`,`img` 覆盖 | Enum {'403', '404', '500'} | - |
| title       | 标题     | ReactNode  | -    |
| desc        | 补充描述    | ReactNode  | -    |
| img         | 背景图片地址     | string  | -    |
| actions     | 建议操作,配置此属性时默认的『返回首页』按钮不生效    | ReactNode  | -    |
| linkElement | 定义链接的元素 | string\|ReactElement | 'a' |


================================================
FILE: app/assets/components/Exception/typeConfig.js
================================================
const config = {
  403: {
    img: 'https://gw.alipayobjects.com/zos/rmsportal/wZcnGqRDyhPOEYFcZDnb.svg',
    title: '403',
    desc: '抱歉,你无权访问该页面',
  },
  404: {
    img: 'https://gw.alipayobjects.com/zos/rmsportal/KpnpchXsobRgLElEozzI.svg',
    title: '404',
    desc: '抱歉,你访问的页面不存在',
  },
  500: {
    img: 'https://gw.alipayobjects.com/zos/rmsportal/RVRUAYdCGeYNBWoKiIwB.svg',
    title: '500',
    desc: '抱歉,服务器出错了',
  },
};

export default config;


================================================
FILE: app/assets/components/FooterToolbar/demo/basic.md
================================================
---
order: 0
title:
  zh-CN: 演示
  en-US: demo
iframe: 400
---

## zh-CN

浮动固定页脚。

## en-US

Fixed to the footer.

````jsx
import FooterToolbar from 'ant-design-pro/lib/FooterToolbar';
import { Button } from 'antd';

ReactDOM.render(
  <div style={{ background: '#f7f7f7', padding: 24 }}>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <p>Content Content Content Content</p>
    <FooterToolbar extra="extra information">
      <Button>Cancel</Button>
      <Button type="primary">Submit</Button>
    </FooterToolbar>
  </div>
, mountNode);
````

================================================
FILE: app/assets/components/FooterToolbar/index.d.ts
================================================
import * as React from 'react';
export interface IFooterToolbarProps {
  extra: React.ReactNode;
  style?: React.CSSProperties;
}

export default class FooterToolbar extends React.Component<IFooterToolbarProps, any> {}


================================================
FILE: app/assets/components/FooterToolbar/index.en-US.md
================================================
---
title: FooterToolbar
cols: 1
order: 6
---

A toolbar fixed at the bottom.

## Usage

It is fixed at the bottom of the content area and does not move along with the scroll bar, which is usually used for data collection and submission for long pages.

## API

Property | Description | Type | Default
---------|-------------|------|--------
children | toolbar content, align to the right | ReactNode | -
extra | extra information, align to the left | ReactNode | -

================================================
FILE: app/assets/components/FooterToolbar/index.js
================================================
import React, { Component } from 'react';
import classNames from 'classnames';
import styles from './index.less';

export default class FooterToolbar extends Component {
  render() {
    const { children, className, extra, ...restProps } = this.props;
    return (
      <div className={classNames(className, styles.toolbar)} {...restProps}>
        <div className={styles.left}>{extra}</div>
        <div className={styles.right}>{children}</div>
      </div>
    );
  }
}


================================================
FILE: app/assets/components/FooterToolbar/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.toolbar {
  position: fixed;
  width: 100%;
  bottom: 0;
  right: 0;
  height: 56px;
  line-height: 56px;
  box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03);
  background: #fff;
  border-top: 1px solid @border-color-split;
  padding: 0 24px;
  z-index: 9;

  &:after {
    content: '';
    display: block;
    clear: both;
  }

  .left {
    float: left;
  }

  .right {
    float: right;
  }

  button + button {
    margin-left: 8px;
  }
}


================================================
FILE: app/assets/components/FooterToolbar/index.zh-CN.md
================================================
---
title: FooterToolbar
subtitle: 底部工具栏
cols: 1
order: 6
---

固定在底部的工具栏。

## 何时使用

固定在内容区域的底部,不随滚动条移动,常用于长页面的数据搜集和提交工作。

## API

参数 | 说明 | 类型 | 默认值
----|------|-----|------
children | 工具栏内容,向右对齐 | ReactNode | -
extra | 额外信息,向左对齐 | ReactNode | -


================================================
FILE: app/assets/components/GlobalFooter/demo/basic.md
================================================
---
order: 0
title: 演示
iframe: 400
---

基本页脚。

````jsx
import GlobalFooter from 'ant-design-pro/lib/GlobalFooter';
import { Icon } from 'antd';

const links = [{
  key: '帮助',
  title: '帮助',
  href: '',
}, {
  key: 'github',
  title: <Icon type="github" />,
  href: 'https://github.com/ant-design/ant-design-pro',
  blankTarget: true,
}, {
  key: '条款',
  title: '条款',
  href: '',
  blankTarget: true,
}];

const copyright = <div>Copyright <Icon type="copyright" /> 2017 蚂蚁金服体验技术部出品</div>;

ReactDOM.render(
  <div style={{ background: '#f5f5f5', overflow: 'hidden' }}>
    <div style={{ height: 280 }} />
    <GlobalFooter links={links} copyright={copyright} />
  </div>
, mountNode);
````


================================================
FILE: app/assets/components/GlobalFooter/index.d.ts
================================================
import * as React from 'react';
export interface IGlobalFooterProps {
  links?: Array<{
    key?: string;
    title: React.ReactNode;
    href: string;
    blankTarget?: boolean;
  }>;
  copyright?: React.ReactNode;
  style?: React.CSSProperties;
}

export default class GlobalFooter extends React.Component<IGlobalFooterProps, any> {}


================================================
FILE: app/assets/components/GlobalFooter/index.js
================================================
import React from 'react';
import classNames from 'classnames';
import styles from './index.less';

const GlobalFooter = ({ className, links, copyright }) => {
  const clsString = classNames(styles.globalFooter, className);
  return (
    <div className={clsString}>
      {links && (
        <div className={styles.links}>
          {links.map(link => (
            <a key={link.key} target={link.blankTarget ? '_blank' : '_self'} href={link.href}>
              {link.title}
            </a>
          ))}
        </div>
      )}
      {copyright && <div className={styles.copyright}>{copyright}</div>}
    </div>
  );
};

export default GlobalFooter;


================================================
FILE: app/assets/components/GlobalFooter/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.globalFooter {
  padding: 0 16px;
  margin: 48px 0 24px 0;
  text-align: center;

  .links {
    margin-bottom: 8px;

    a {
      color: @text-color-secondary;
      transition: all 0.3s;

      &:not(:last-child) {
        margin-right: 40px;
      }

      &:hover {
        color: @text-color;
      }
    }
  }

  .copyright {
    color: @text-color-secondary;
    font-size: @font-size-base;
  }
}


================================================
FILE: app/assets/components/GlobalFooter/index.md
================================================
---
title:
  en-US: GlobalFooter
  zh-CN: GlobalFooter
subtitle: 全局页脚
cols: 1
order: 7
---

页脚属于全局导航的一部分,作为对顶部导航的补充,通过传递数据控制展示内容。

## API

参数 | 说明 | 类型 | 默认值
----|------|-----|------
links | 链接数据 | array<{ title: ReactNode, href: string, blankTarget?: boolean }> | -
copyright | 版权信息 | ReactNode | -


================================================
FILE: app/assets/components/GlobalHeader/index.js
================================================
import React, { PureComponent } from 'react';
import { Icon, Divider, Tooltip } from 'antd';
import Debounce from 'lodash-decorators/debounce';
import {Link, routerRedux} from 'dva/router';

import ca from '../../utils/ca';
import styles from './index.less';
import { connect } from "dva/index";

@connect()
export default class GlobalHeader extends PureComponent {
  componentWillUnmount() {
    this.triggerResizeEvent.cancel();
  }
  toggle = () => {
    const { collapsed, onCollapse } = this.props;
    onCollapse(!collapsed);
    this.triggerResizeEvent();
  };
  /* eslint-disable*/
  @Debounce(600)
  triggerResizeEvent() {
    const event = document.createEvent('HTMLEvents');
    event.initEvent('resize', true, false);
    window.dispatchEvent(event);
  }

  handleLogout = async () => {
    const res = await ca.get('/api/userLogout');
    if (!res) return;
    const { dispatch } = this.props;
    dispatch(routerRedux.push('/user/login'));
  };

  render() {
    const {
      collapsed,
      isMobile,
      logo,
      currentUser,
    } = this.props;
    return (
      <div className={styles.header}>
        {isMobile && [
          <Link to="/" className={styles.logo} key="logo">
            <img src={logo} alt="logo" width="32" />
          </Link>,
          <Divider type="vertical" key="line" />,
        ]}
        <Icon
          className={styles.trigger}
          type={collapsed ? 'menu-unfold' : 'menu-fold'}
          onClick={this.toggle}
        />
        <div className={styles.right}>
          欢迎 {currentUser.real_name}
          <Tooltip placement="bottom" title="退出登录">
            <a
              className={styles.action}
              onClick={this.handleLogout}
            >
              <Icon type="logout" />
            </a>
          </Tooltip>
        </div>
      </div>
    );
  }
}


================================================
FILE: app/assets/components/GlobalHeader/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.header {
  height: 64px;
  padding: 0 12px 0 0;
  background: #fff;
  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
  position: relative;
}

:global {
  .ant-layout {
    min-height: 100vh;
    overflow-x: hidden;
  }
}

.logo {
  height: 64px;
  line-height: 58px;
  vertical-align: top;
  display: inline-block;
  padding: 0 0 0 24px;
  cursor: pointer;
  font-size: 20px;
  img {
    display: inline-block;
    vertical-align: middle;
  }
}

.menu {
  :global(.anticon) {
    margin-right: 8px;
  }
  :global(.ant-dropdown-menu-item) {
    width: 160px;
  }
}

i.trigger {
  font-size: 20px;
  line-height: 64px;
  cursor: pointer;
  transition: all 0.3s, padding 0s;
  padding: 0 24px;
  &:hover {
    background: @primary-1;
  }
}

.right {
  float: right;
  height: 100%;
  .action {
    cursor: pointer;
    padding: 0 12px;
    display: inline-block;
    transition: all 0.3s;
    height: 100%;
    > i {
      font-size: 16px;
      vertical-align: middle;
      color: @text-color;
    }
    &:hover,
    &:global(.ant-popover-open) {
      background: @primary-1;
    }
  }
  .search {
    padding: 0;
    margin: 0 12px;
    &:hover {
      background: transparent;
    }
  }
  .account {
    .avatar {
      margin: 20px 8px 20px 0;
      color: @primary-color;
      background: rgba(255, 255, 255, 0.85);
      vertical-align: middle;
    }
  }
}

@media only screen and (max-width: @screen-md) {
  .header {
    :global(.ant-divider-vertical) {
      vertical-align: unset;
    }
    .name {
      display: none;
    }
    i.trigger {
      padding: 0 12px;
    }
    .logo {
      padding-right: 12px;
      position: relative;
    }
    .right {
      position: absolute;
      right: 12px;
      top: 0;
      background: #fff;
      .account {
        .avatar {
          margin-right: 0;
        }
      }
    }
  }
}


================================================
FILE: app/assets/components/HeaderSearch/demo/basic.md
================================================
---
order: 0
title: 全局搜索
---

通常放置在导航工具条右侧。(点击搜索图标预览效果)

````jsx
import HeaderSearch from 'ant-design-pro/lib/HeaderSearch';

ReactDOM.render(
  <div
    style={{
      textAlign: 'right',
      height: '64px',
      lineHeight: '64px',
      boxShadow: '0 1px 4px rgba(0,21,41,.12)',
      padding: '0 32px',
      width: '400px',
    }}
  >
    <HeaderSearch
      placeholder="站内搜索"
      dataSource={['搜索提示一', '搜索提示二', '搜索提示三']}
      onSearch={(value) => {
        console.log('input', value); // eslint-disable-line
      }}
      onPressEnter={(value) => {
        console.log('enter', value); // eslint-disable-line
      }}
    />
  </div>
, mountNode);
````


================================================
FILE: app/assets/components/HeaderSearch/index.d.ts
================================================
import * as React from 'react';
export interface IHeaderSearchProps {
  placeholder?: string;
  dataSource?: string[];
  onSearch?: (value: string) => void;
  onChange?: (value: string) => void;
  onPressEnter?: (value: string) => void;
  style?: React.CSSProperties;
}

export default class HeaderSearch extends React.Component<IHeaderSearchProps, any> {}


================================================
FILE: app/assets/components/HeaderSearch/index.js
================================================
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import { Input, Icon, AutoComplete } from 'antd';
import classNames from 'classnames';
import styles from './index.less';

export default class HeaderSearch extends PureComponent {
  static defaultProps = {
    defaultActiveFirstOption: false,
    onPressEnter: () => {},
    onSearch: () => {},
    className: '',
    placeholder: '',
    dataSource: [],
    defaultOpen: false,
  };
  static propTypes = {
    className: PropTypes.string,
    placeholder: PropTypes.string,
    onSearch: PropTypes.func,
    onPressEnter: PropTypes.func,
    defaultActiveFirstOption: PropTypes.bool,
    dataSource: PropTypes.array,
    defaultOpen: PropTypes.bool,
  };
  state = {
    searchMode: this.props.defaultOpen,
    value: '',
  };
  componentWillUnmount() {
    clearTimeout(this.timeout);
  }
  onKeyDown = e => {
    if (e.key === 'Enter') {
      this.timeout = setTimeout(() => {
        this.props.onPressEnter(this.state.value); // Fix duplicate onPressEnter
      }, 0);
    }
  };
  onChange = value => {
    this.setState({ value });
    if (this.props.onChange) {
      this.props.onChange();
    }
  };
  enterSearchMode = () => {
    this.setState({ searchMode: true }, () => {
      if (this.state.searchMode) {
        this.input.focus();
      }
    });
  };
  leaveSearchMode = () => {
    this.setState({
      searchMode: false,
      value: '',
    });
  };
  render() {
    const { className, placeholder, ...restProps } = this.props;
    delete restProps.defaultOpen; // for rc-select not affected
    const inputClass = classNames(styles.input, {
      [styles.show]: this.state.searchMode,
    });
    return (
      <span className={classNames(className, styles.headerSearch)} onClick={this.enterSearchMode}>
        <Icon type="search" key="Icon" />
        <AutoComplete
          key="AutoComplete"
          {...restProps}
          className={inputClass}
          value={this.state.value}
          onChange={this.onChange}
        >
          <Input
            placeholder={placeholder}
            ref={node => {
              this.input = node;
            }}
            onKeyDown={this.onKeyDown}
            onBlur={this.leaveSearchMode}
          />
        </AutoComplete>
      </span>
    );
  }
}


================================================
FILE: app/assets/components/HeaderSearch/index.less
================================================
@import '~antd/lib/style/themes/default.less';

.headerSearch {
  :global(.anticon-search) {
    cursor: pointer;
    font-size: 16px;
  }
  .input {
    transition: width 0.3s, margin-left 0.3s;
    width: 0;
    background: transparent;
    border-radius: 0;
    :global(.ant-select-selection) {
      background: transparent;
    }
    input {
      border: 0;
      padding-left: 0;
      padding-right: 0;
      box-shadow: none !important;
    }
    &,
    &:hover,
    &:focus {
      border-bottom: 1px solid @border-color-base;
    }
    &.show {
      width: 210px;
      margin-left: 8px;
    }
  }
}


================================================
FILE: app/assets/components/HeaderSearch/index.md
================================================
---
title:
  en-US: HeaderSearch
  zh-CN: HeaderSearch
subtitle: 顶部搜索框
cols: 1
order: 8
---

通常作为全局搜索的入口,放置在导航工具条右侧。

## API

参数 | 说明 | 类型 | 默认值
----|------|-----|------
placeholder | 占位文字 | string | -
dataSource | 当前提示内容列表 | string[] | -
onSearch | 选择某项或按下回车时的回调 | function(value) | -
onChange | 输入搜索字符的回调 | function(value) | -
onPressEnter | 按下回车时的回调 | function(value) | -
defaultOpen | 输入框首次显示是否打开 | boolean | false


================================================
FILE: app/assets/components/JsonSchemaForm/components/AddButton.js
================================================
import React from "react";
import IconButton from "./IconButton";

export default function AddButton({ className, onClick, disabled }) {
  return (
    <div className="row">
      <p className={`col-xs-3 col-xs-offset-9 text-right ${className}`}>
        <IconButton
          type="info"
          icon="plus"
          className="btn-add col-xs-12"
          tabIndex="0"
          onClick={onClick}
          disabled={disabled}
        />
      </p>
    </div>
  );
}


================================================
FILE: app/assets/components/JsonSchemaForm/components/ErrorList.js
================================================
import React from "react";

export default function ErrorList(props) {
  const { errors } = props;
  return (
    <div className="panel panel-danger errors">
      <div className="panel-heading">
        <h3 className="panel-title">Errors</h3>
      </div>
      <ul className="list-group">
        {errors.map((error, i) => {
          return (
            <li key={i} className="list-group-item text-danger">
              {error.stack}
            </li>
          );
        })}
      </ul>
    </div>
  );
}


================================================
FILE: app/assets/components/JsonSchemaForm/components/Form.js
================================================
import React, { Component } from "react";
import PropTypes from "prop-types";

import { default as DefaultErrorList } from "./ErrorList";
import {
  getDefaultFormState,
  retrieveSchema,
  shouldRender,
  toIdSchema,
  setState,
  getDefaultRegistry,
  deepEquals,
} from "../utils";
import validateFormData, { toErrorList } from "../validate";

export default class Form extends Component {
  static defaultProps = {
    uiSchema: {},
    noValidate: false,
    liveValidate: false,
    disabled: false,
    safeRenderCompletion: false,
    noHtml5Validate: false,
    ErrorList: DefaultErrorList,
  };

  constructor(props) {
    super(props);
    this.state = this.getStateFromProps(props);
    if (
      this.props.onChange &&
      !deepEquals(this.state.formData, this.props.formData)
    ) {
      this.props.onChange(this.state);
    }
    this.formElement = null;
  }

  componentWillReceiveProps(nextProps) {
    const nextState = this.getStateFromProps(nextProps);
    if (
      !deepEquals(nextState.formData, nextProps.formData) &&
      !deepEquals(nextState.formData, this.state.formData) &&
      this.props.onChange
    ) {
      this.props.onChange(nextState);
    }
    this.setState(nextState);
  }

  getStateFromProps(props) {
    const state = this.state || {};
    const schema = "schema" in props ? props.schema : this.props.schema;
    const uiSchema = "uiSchema" in props ? props.uiSchema : this.props.uiSchema;
    const edit = typeof props.formData !== "undefined";
    const liveValidate = props.liveValidate || this.props.liveValidate;
    const mustValidate = edit && !props.noValidate && liveValidate;
    const { definitions } = schema;
    const formData = getDefaultFormState(schema, props.formData, definitions);
    const retrievedSchema = retrieveSchema(schema, definitions, formData);
    const additionalMetaSchemas = props.additionalMetaSchemas;
    const { errors, errorSchema } = mustValidate
      ? this.validate(formData, schema, additionalMetaSchemas)
      : {
          errors: state.errors || [],
          errorSchema: state.errorSchema || {},
        };
    const idSchema = toIdSchema(
      retrievedSchema,
      uiSchema["ui:rootFieldId"],
      definitions,
      formData,
      props.idPrefix
    );
    return {
      schema,
      uiSchema,
      idSchema,
      formData,
      edit,
      errors,
      errorSchema,
      additionalMetaSchemas,
    };
  }

  shouldComponentUpdate(nextProps, nextState) {
    return shouldRender(this, nextProps, nextState);
  }

  validate(
    formData,
    schema = this.props.schema,
    additionalMetaSchemas = this.props.additionalMetaSchemas
  ) {
    const { validate, transformErrors } = this.props;
    const { definitions } = this.getRegistry();
    const resolvedSchema = retrieveSchema(schema, definitions, formData);
    return validateFormData(
      formData,
      resolvedSchema,
      validate,
      transformErrors,
      additionalMetaSchemas
    );
  }

  renderErrors() {
    const { errors, errorSchema, schema, uiSchema } = this.state;
    const { ErrorList, showErrorList, formContext } = this.props;

    if (errors.length && showErrorList != false) {
      return (
        <ErrorList
          errors={errors}
          errorSchema={errorSchema}
          schema={schema}
          uiSchema={uiSchema}
          formContext={formContext}
        />
      );
    }
    return null;
  }

  onChange = (formData, newErrorSchema) => {
    const mustValidate = !this.props.noValidate && this.props.liveValidate;
    let state = { formData };
    if (mustValidate) {
      const { errors, errorSchema } = this.validate(formData);
      state = { ...state, errors, errorSchema };
    } else if (!this.props.noValidate && newErrorSchema) {
      state = {
        ...state,
        errorSchema: newErrorSchema,
        errors: toErrorList(newErrorSchema),
      };
    }
    setState(this, state, () => {
      if (this.props.onChange) {
        this.props.onChange(this.state);
      }
    });
  };

  onBlur = (...args) => {
    if (this.props.onBlur) {
      this.props.onBlur(...args);
    }
  };

  onFocus = (...args) => {
    if (this.props.onFocus) {
      this.props.onFocus(...args);
    }
  };

  onSubmit = event => {
    event.preventDefault();
    event.persist();

    if (!this.props.noValidate) {
      const { errors, errorSchema } = this.validate(this.state.formData);
      if (Object.keys(errors).length > 0) {
        setState(this, { errors, errorSchema }, () => {
          if (this.props.onError) {
            this.props.onError(errors);
          } else {
            console.error("Form validation failed", errors);
          }
        });
        return;
      }
    }

    this.setState({ errors: [], errorSchema: {} }, () => {
      if (this.props.onSubmit) {
        this.props.onSubmit({ ...this.state, status: "submitted" }, event);
      }
    });
  };

  getRegistry() {
    // For BC, accept passed SchemaField and TitleField props and pass them to
    // the "fields" registry one.
    const { fields, widgets } = getDefaultRegistry();
    return {
      fields: { ...fields, ...this.props.fields },
      widgets: { ...widgets, ...this.props.widgets },
      ArrayFieldTemplate: this.props.ArrayFieldTemplate,
      ObjectFieldTemplate: this.props.ObjectFieldTemplate,
      FieldTemplate: this.props.FieldTemplate,
      definitions: this.props.schema.definitions || {},
      formContext: this.props.formContext || {},
    };
  }

  submit() {
    if (this.formElement) {
      this.formElement.dispatchEvent(new Event("submit", { cancelable: true }));
    }
  }

  render() {
    const {
      children,
      safeRenderCompletion,
      id,
      idPrefix,
      className,
      name,
      method,
      target,
      action,
      autocomplete,
      enctype,
      acceptcharset,
      noHtml5Validate,
      disabled,
    } = this.props;

    const { schema, uiSchema, formData, errorSchema, idSchema } = this.state;
    const registry = this.getRegistry();
    const _SchemaField = registry.fields.SchemaField;

    return (
      <form
        className={className ? className : "rjsf"}
        id={id}
        name={name}
        method={method}
        target={target}
        action={action}
        autoComplete={autocomplete}
        encType={enctype}
        acceptCharset={acceptcharset}
        noValidate={noHtml5Validate}
        onSubmit={this.onSubmit}
        ref={form => {
          this.formElement = form;
        }}>
        {this.renderErrors()}
        <_SchemaField
          schema={schema}
          uiSchema={uiSchema}
          errorSchema={errorSchema}
          idSchema={idSchema}
          idPrefix={idPrefix}
          formData={formData}
          onChange={this.onChange}
          onBlur={this.onBlur}
          onFocus={this.onFocus}
          registry={registry}
          safeRenderCompletion={safeRenderCompletion}
          disabled={disabled}
        />
        {children ? (
          children
        ) : (
          <div>
            <button type="submit" className="btn btn-info">
              提交
            </button>
          </div>
        )}
      </form>
    );
  }
}

if (process.env.NODE_ENV !== "production") {
  Form.propTypes = {
    schema: PropTypes.object.isRequired,
    uiSchema: PropTypes.object,
    formData: PropTypes.any,
    widgets: PropTypes.objectOf(
      PropTypes.oneOfType([PropTypes.func, PropTypes.object])
    ),
    fields: PropTypes.objectOf(PropTypes.func),
    ArrayFieldTemplate: PropTypes.func,
    ObjectFieldTemplate: PropTypes.func,
    FieldTemplate: PropTypes.func,
    ErrorList: PropTypes.func,
    onChange: PropTypes.func,
    onError: PropTypes.func,
    showErrorList: PropTypes.bool,
    onSubmit: PropTypes.func,
    id: PropTypes.string,
    className: PropTypes.string,
    name: PropTypes.string,
    method: PropTypes.string,
    target: PropTypes.string,
    action: PropTypes.string,
    autocomplete: PropTypes.string,
    enctype: PropTypes.string,
    acceptcharset: PropTypes.string,
    noValidate: PropTypes.bool,
    noHtml5Validate: PropTypes.bool,
    liveValidate: PropTypes.bool,
    validate: PropTypes.func,
    transformErrors: PropTypes.func,
    safeRenderCompletion: PropTypes.bool,
    formContext: PropTypes.object,
    additionalMetaSchemas: PropTypes.arrayOf(PropTypes.object),
  };
}


================================================
FILE: app/assets/components/JsonSchemaForm/components/IconButton.js
================================================
import React from "react";

export default function IconButton(props) {
  const { type = "default", icon, className, ...otherProps } = props;
  return (
    <button
      type="button"
      className={`btn btn-${type} ${className}`}
      {...otherProps}>
      <i className={`glyphicon glyphicon-${icon}`} />
    </button>
  );
}


================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/ArrayField.js
================================================
import AddButton from "../AddButton";
import IconButton from "../IconButton";
import React, { Component } from "react";
import includes from "core-js/library/fn/array/includes";
import * as types from "../../types";

import UnsupportedField from "./UnsupportedField";
import {
  getWidget,
  getDefaultFormState,
  getUiOptions,
  isMultiSelect,
  isFilesArray,
  isFixedItems,
  allowAdditionalItems,
  optionsList,
  retrieveSchema,
  toIdSchema,
  getDefaultRegistry,
} from "../../utils";

function ArrayFieldTitle({ TitleField, idSchema, title, required }) {
  if (!title) {
    return null;
  }
  const id = `${idSchema.$id}__title`;
  return <TitleField id={id} title={title} required={required} />;
}

function ArrayFieldDescription({ DescriptionField, idSchema, description }) {
  if (!description) {
    return null;
  }
  const id = `${idSchema.$id}__description`;
  return <DescriptionField id={id} description={description} />;
}

// Used in the two templates
function DefaultArrayItem(props) {
  const btnStyle = {
    flex: 1,
    paddingLeft: 6,
    paddingRight: 6,
    fontWeight: "bold",
  };
  return (
    <div key={props.index} className={props.className}>
      <div className={props.hasToolbar ? "col-xs-9" : "col-xs-12"}>
        {props.children}
      </div>

      {props.hasToolbar && (
        <div className="col-xs-3 array-item-toolbox">
          <div
            className="btn-group"
            style={{
              display: "flex",
              justifyContent: "space-around",
            }}>
            {(props.hasMoveUp || props.hasMoveDown) && (
              <IconButton
                icon="arrow-up"
                className="array-item-move-up"
                tabIndex="-1"
                style={btnStyle}
                disabled={props.disabled || props.readonly || !props.hasMoveUp}
                onClick={props.onReorderClick(props.index, props.index - 1)}
              />
            )}

            {(props.hasMoveUp || props.hasMoveDown) && (
              <IconButton
                icon="arrow-down"
                className="array-item-move-down"
                tabIndex="-1"
                style={btnStyle}
                disabled={
                  props.disabled || props.readonly || !props.hasMoveDown
                }
                onClick={props.onReorderClick(props.index, props.index + 1)}
              />
            )}

            {props.hasRemove && (
              <IconButton
                type="danger"
                icon="remove"
                className="array-item-remove"
                tabIndex="-1"
                style={btnStyle}
                disabled={props.disabled || props.readonly}
                onClick={props.onDropIndexClick(props.index)}
              />
            )}
          </div>
        </div>
      )}
    </div>
  );
}

function DefaultFixedArrayFieldTemplate(props) {
  return (
    <fieldset className={props.className} id={props.idSchema.$id}>
      <ArrayFieldTitle
        key={`array-field-title-${props.idSchema.$id}`}
        TitleField={props.TitleField}
        idSchema={props.idSchema}
        title={props.uiSchema["ui:title"] || props.title}
        required={props.required}
      />

      {(props.uiSchema["ui:description"] || props.schema.description) && (
        <div
          className="field-description"
          key={`field-description-${props.idSchema.$id}`}>
          {props.uiSchema["ui:description"] || props.schema.description}
        </div>
      )}

      <div
        className="row array-item-list"
        key={`array-item-list-${props.idSchema.$id}`}>
        {props.items && props.items.map(DefaultArrayItem)}
      </div>

      {props.canAdd && (
        <AddButton
          className="array-item-add"
          onClick={props.onAddClick}
          disabled={props.disabled || props.readonly}
        />
      )}
    </fieldset>
  );
}

function DefaultNormalArrayFieldTemplate(props) {
  return (
    <fieldset className={props.className} id={props.idSchema.$id}>
      <ArrayFieldTitle
        key={`array-field-title-${props.idSchema.$id}`}
        TitleField={props.TitleField}
        idSchema={props.idSchema}
        title={props.uiSchema["ui:title"] || props.title}
        required={props.required}
      />

      {(props.uiSchema["ui:description"] || props.schema.description) && (
        <ArrayFieldDescription
          key={`array-field-description-${props.idSchema.$id}`}
          DescriptionField={props.DescriptionField}
          idSchema={props.idSchema}
          description={
            props.uiSchema["ui:description"] || props.schema.description
          }
        />
      )}

      <div
        className="row array-item-list"
        key={`array-item-list-${props.idSchema.$id}`}>
        {props.items && props.items.map(p => DefaultArrayItem(p))}
      </div>

      {props.canAdd && (
        <AddButton
          className="array-item-add"
          onClick={props.onAddClick}
          disabled={props.disabled || props.readonly}
        />
      )}
    </fieldset>
  );
}

class ArrayField extends Component {
  static defaultProps = {
    uiSchema: {},
    formData: [],
    idSchema: {},
    required: false,
    disabled: false,
    readonly: false,
    autofocus: false,
  };

  get itemTitle() {
    const { schema } = this.props;
    return schema.items.title || schema.items.description || "Item";
  }

  isItemRequired(itemSchema) {
    if (Array.isArray(itemSchema.type)) {
      // While we don't yet support composite/nullable jsonschema types, it's
      // future-proof to check for requirement against these.
      return !includes(itemSchema.type, "null");
    }
    // All non-null array item types are inherently required by design
    return itemSchema.type !== "null";
  }

  canAddItem(formItems) {
    const { schema, uiSchema } = this.props;
    let { addable } = getUiOptions(uiSchema);
    if (addable !== false) {
      // if ui:options.addable was not explicitly set to false, we can add
      // another item if we have not exceeded maxItems yet
      if (schema.maxItems !== undefined) {
        addable = formItems.length < schema.maxItems;
      } else {
        addable = true;
      }
    }
    return addable;
  }

  onAddClick = event => {
    event.preventDefault();
    const { schema, formData, registry = getDefaultRegistry() } = this.props;
    const { definitions } = registry;
    let itemSchema = schema.items;
    if (isFixedItems(schema) && allowAdditionalItems(schema)) {
      itemSchema = schema.additionalItems;
    }
    this.props.onChange([
      ...formData,
      getDefaultFormState(itemSchema, undefined, definitions),
    ]);
  };

  onDropIndexClick = index => {
    return event => {
      if (event) {
        event.preventDefault();
      }
      const { formData, onChange } = this.props;
      // refs #195: revalidate to ensure properly reindexing errors
      let newErrorSchema;
      if (this.props.errorSchema) {
        newErrorSchema = {};
        const errorSchema = this.props.errorSchema;
        for (let i in errorSchema) {
          i = parseInt(i);
          if (i < index) {
            newErrorSchema[i] = errorSchema[i];
          } else if (i > index) {
            newErrorSchema[i - 1] = errorSchema[i];
          }
        }
      }
      onChange(formData.filter((_, i) => i !== index), newErrorSchema);
    };
  };

  onReorderClick = (index, newIndex) => {
    return event => {
      if (event) {
        event.preventDefault();
        event.target.blur();
      }
      const { formData, onChange } = this.props;
      let newErrorSchema;
      if (this.props.errorSchema) {
        newErrorSchema = {};
        const errorSchema = this.props.errorSchema;
        for (let i in errorSchema) {
          if (i == index) {
            newErrorSchema[newIndex] = errorSchema[index];
          } else if (i == newIndex) {
            newErrorSchema[index] = errorSchema[newIndex];
          } else {
            newErrorSchema[i] = errorSchema[i];
          }
        }
      }

      function reOrderArray() {
        // Copy item
        let newFormData = formData.slice();

        // Moves item from index to newIndex
        newFormData.splice(index, 1);
        newFormData.splice(newIndex, 0, formData[index]);

        return newFormData;
      }

      onChange(reOrderArray(), newErrorSchema);
    };
  };

  onChangeForIndex = index => {
    return (value, errorSchema) => {
      const { formData, onChange } = this.props;
      const newFormData = formData.map((item, i) => {
        // We need to treat undefined items as nulls to have validation.
        // See https://github.com/tdegrunt/jsonschema/issues/206
        const jsonValue = typeof value === "undefined" ? null : value;
        return index === i ? jsonValue : item;
      });
      onChange(
        newFormData,
        errorSchema &&
          this.props.errorSchema && {
            ...this.props.errorSchema,
            [index]: errorSchema,
          }
      );
    };
  };

  onSelectChange = value => {
    this.props.onChange(value);
  };

  render() {
    const {
      schema,
      uiSchema,
      idSchema,
      registry = getDefaultRegistry(),
    } = this.props;
    const { definitions } = registry;
    if (!schema.hasOwnProperty("items")) {
      return (
        <UnsupportedField
          schema={schema}
          idSchema={idSchema}
          reason="Missing items definition"
        />
      );
    }
    if (isFixedItems(schema)) {
      return this.renderFixedArray();
    }
    if (isFilesArray(schema, uiSchema, definitions)) {
      return this.renderFiles();
    }
    if (isMultiSelect(schema, definitions)) {
      return this.renderMultiSelect();
    }
    return this.renderNormalArray();
  }

  renderNormalArray() {
    const {
      schema,
      uiSchema,
      formData,
      errorSchema,
      idSchema,
      name,
      required,
      disabled,
      readonly,
      autofocus,
      registry = getDefaultRegistry(),
      onBlur,
      onFocus,
      idPrefix,
      rawErrors,
    } = this.props;
    const title = schema.title === undefined ? name : schema.title;
    const { ArrayFieldTemplate, definitions, fields, formContext } = registry;
    const { TitleField, DescriptionField } = fields;
    const itemsSchema = retrieveSchema(schema.items, definitions);
    const arrayProps = {
      canAdd: this.canAddItem(formData),
      items: Array.isArray(formData) && formData.map((item, index) => {
        const itemSchema = retrieveSchema(schema.items, definitions, item);
        const itemErrorSchema = errorSchema ? errorSchema[index] : undefined;
        const itemIdPrefix = idSchema.$id + "_" + index;
        const itemIdSchema = toIdSchema(
          itemSchema,
          itemIdPrefix,
          definitions,
          item,
          idPrefix
        );
        return this.renderArrayFieldItem({
          index,
          canMoveUp: index > 0,
          canMoveDown: index < formData.length - 1,
          itemSchema: itemSchema,
          itemIdSchema,
          itemErrorSchema,
          itemData: item,
          itemUiSchema: uiSchema.items,
          autofocus: autofocus && index === 0,
          onBlur,
          onFocus,
        });
      }),
      className: `field field-array field-array-of-${itemsSchema.type}`,
      DescriptionField,
      disabled,
      idSchema,
      uiSchema,
      onAddClick: this.onAddClick,
      readonly,
      required,
      schema,
      title,
      TitleField,
      formContext,
      formData,
      rawErrors,
    };

    // Check if a custom render function was passed in
    const Component = ArrayFieldTemplate || DefaultNormalArrayFieldTemplate;
    return <Component {...arrayProps} />;
  }

  renderMultiSelect() {
    const {
      schema,
      idSchema,
      uiSchema,
      formData,
      disabled,
      readonly,
      autofocus,
      onBlur,
      onFocus,
      registry = getDefaultRegistry(),
      rawErrors,
    } = this.props;
    const items = this.props.formData;
    const { widgets, definitions, formContext } = registry;
    const itemsSchema = retrieveSchema(schema.items, definitions, formData);
    const enumOptions = optionsList(itemsSchema);
    const { widget = "select", ...options } = {
      ...getUiOptions(uiSchema),
      enumOptions,
    };
    const Widget = getWidget(schema, widget, widgets);
    if (!Widget) return null;
    return (
      <Widget
        id={idSchema && idSchema.$id}
        multiple
        onChange={this.onSelectChange}
        onBlur={onBlur}
        onFocus={onFocus}
        options={options}
        schema={schema}
        value={items}
        disabled={disabled}
        readonly={readonly}
        formContext={formContext}
        autofocus={autofocus}
        rawErrors={rawErrors}
      />
    );
  }

  renderFiles() {
    const {
      schema,
      uiSchema,
      idSchema,
      name,
      disabled,
      readonly,
      autofocus,
      onBlur,
      onFocus,
      registry = getDefaultRegistry(),
      rawErrors,
    } = this.props;
    const title = schema.title || name;
    const items = this.props.formData;
    const { widgets, formContext } = registry;
    const { widget = "files", ...options } = getUiOptions(uiSchema);
    const Widget = getWidget(schema, widget, widgets);
    if (!Widget) return null;
    return (
      <Widget
        options={options}
        id={idSchema && idSchema.$id}
        multiple
        onChange={this.onSelectChange}
        onBlur={onBlur}
        onFocus={onFocus}
        schema={schema}
        title={title}
        value={items}
        disabled={disabled}
        readonly={readonly}
        formContext={formContext}
        autofocus={autofocus}
        rawErrors={rawErrors}
      />
    );
  }

  renderFixedArray() {
    const {
      schema,
      uiSchema,
      formData,
      errorSchema,
      idPrefix,
      idSchema,
      name,
      required,
      disabled,
      readonly,
      autofocus,
      registry = getDefaultRegistry(),
      onBlur,
      onFocus,
      rawErrors,
    } = this.props;
    const title = schema.title || name;
    let items = this.props.formData;
    const { ArrayFieldTemplate, definitions, fields, formContext } = registry;
    const { TitleField } = fields;
    const itemSchemas = schema.items.map((item, index) =>
      retrieveSchema(item, definitions, formData[index])
    );
    const additionalSchema = allowAdditionalItems(schema)
      ? retrieveSchema(schema.additionalItems, definitions, formData)
      : null;

    if (!items || items.length < itemSchemas.length) {
      // to make sure at least all fixed items are generated
      items = items || [];
      items = items.concat(new Array(itemSchemas.length - items.length));
    }

    // These are the props passed into the render function
    const arrayProps = {
      canAdd: this.canAddItem(items) && additionalSchema,
      className: "field field-array field-array-fixed-items",
      disabled,
      idSchema,
      formData,
      items: items.map((item, index) => {
        const additional = index >= itemSchemas.length;
        const itemSchema = additional
          ? retrieveSchema(schema.additionalItems, definitions, item)
          : itemSchemas[index];
        const itemIdPrefix = idSchema.$id + "_" + index;
        const itemIdSchema = toIdSchema(
          itemSchema,
          itemIdPrefix,
          definitions,
          item,
          idPrefix
        );
        const itemUiSchema = additional
          ? uiSchema.additionalItems || {}
          : Array.isArray(uiSchema.items)
          ? uiSchema.items[index]
          : uiSchema.items || {};
        const itemErrorSchema = errorSchema ? errorSchema[index] : undefined;

        return this.renderArrayFieldItem({
          index,
          canRemove: additional,
          canMoveUp: index >= itemSchemas.length + 1,
          canMoveDown: additional && index < items.length - 1,
          itemSchema,
          itemData: item,
          itemUiSchema,
          itemIdSchema,
          itemErrorSchema,
          autofocus: autofocus && index === 0,
          onBlur,
          onFocus,
        });
      }),
      onAddClick: this.onAddClick,
      readonly,
      required,
      schema,
      uiSchema,
      title,
      TitleField,
      formContext,
      rawErrors,
    };

    // Check if a custom template template was passed in
    const Template = ArrayFieldTemplate || DefaultFixedArrayFieldTemplate;
    return <Template {...arrayProps} />;
  }

  renderArrayFieldItem(props) {
    const {
      index,
      canRemove = true,
      canMoveUp = true,
      canMoveDown = true,
      itemSchema,
      itemData,
      itemUiSchema,
      itemIdSchema,
      itemErrorSchema,
      autofocus,
      onBlur,
      onFocus,
      rawErrors,
    } = props;
    const {
      disabled,
      readonly,
      uiSchema,
      registry = getDefaultRegistry(),
    } = this.props;
    const {
      fields: { SchemaField },
    } = registry;
    const { orderable, removable } = {
      orderable: true,
      removable: true,
      ...uiSchema["ui:options"],
    };
    const has = {
      moveUp: orderable && canMoveUp,
      moveDown: orderable && canMoveDown,
      remove: removable && canRemove,
    };
    has.toolbar = Object.keys(has).some(key => has[key]);

    return {
      children: (
        <SchemaField
          schema={itemSchema}
          uiSchema={itemUiSchema}
          formData={itemData}
          errorSchema={itemErrorSchema}
          idSchema={itemIdSchema}
          required={this.isItemRequired(itemSchema)}
          onChange={this.onChangeForIndex(index)}
          onBlur={onBlur}
          onFocus={onFocus}
          registry={this.props.registry}
          disabled={this.props.disabled}
          readonly={this.props.readonly}
          autofocus={autofocus}
          rawErrors={rawErrors}
        />
      ),
      className: "array-item",
      disabled,
      hasToolbar: has.toolbar,
      hasMoveUp: has.moveUp,
      hasMoveDown: has.moveDown,
      hasRemove: has.remove,
      index,
      onDropIndexClick: this.onDropIndexClick,
      onReorderClick: this.onReorderClick,
      readonly,
    };
  }
}

if (process.env.NODE_ENV !== "production") {
  ArrayField.propTypes = types.fieldProps;
}

export default ArrayField;


================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/BooleanField.js
================================================
import React from "react";
import * as types from "../../types";

import {
  getWidget,
  getUiOptions,
  optionsList,
  getDefaultRegistry,
} from "../../utils";

function BooleanField(props) {
  const {
    schema,
    name,
    uiSchema,
    idSchema,
    formData,
    registry = getDefaultRegistry(),
    required,
    disabled,
    readonly,
    autofocus,
    onChange,
    onFocus,
    onBlur,
    rawErrors,
  } = props;
  const { title } = schema;
  const { widgets, formContext } = registry;
  const { widget = "checkbox", ...options } = getUiOptions(uiSchema);
  const Widget = getWidget(schema, widget, widgets);
  if (!Widget) return null;
  let enumOptions;

  if (Array.isArray(schema.oneOf)) {
    enumOptions = optionsList({
      oneOf: schema.oneOf.map(option => ({
        ...option,
        title: option.title || (option.const === true ? "yes" : "no"),
      })),
    });
  } else {
    enumOptions = optionsList({
      enum: schema.enum || [true, false],
      enumNames:
        schema.enumNames ||
        (schema.enum && schema.enum[0] === false
          ? ["no", "yes"]
          : ["yes", "no"]),
    });
  }

  return (
    <Widget
      options={{ ...options, enumOptions }}
      schema={schema}
      id={idSchema && idSchema.$id}
      onChange={onChange}
      onFocus={onFocus}
      onBlur={onBlur}
      label={title === undefined ? name : title}
      value={formData}
      required={required}
      disabled={disabled}
      readonly={readonly}
      registry={registry}
      formContext={formContext}
      autofocus={autofocus}
      rawErrors={rawErrors}
    />
  );
}

if (process.env.NODE_ENV !== "production") {
  BooleanField.propTypes = types.fieldProps;
}

BooleanField.defaultProps = {
  uiSchema: {},
  disabled: false,
  readonly: false,
  autofocus: false,
};

export default BooleanField;


================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/DescriptionField.js
================================================
import React from "react";
import PropTypes from "prop-types";

function DescriptionField(props) {
  const { id, description } = props;
  if (!description) {
    return null;
  }
  if (typeof description === "string") {
    return (
      <p id={id} className="field-description">
        {description}
      </p>
    );
  } else {
    return (
      <div id={id} className="field-description">
        {description}
      </div>
    );
  }
}

if (process.env.NODE_ENV !== "production") {
  DescriptionField.propTypes = {
    id: PropTypes.string,
    description: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
  };
}

export default DescriptionField;


================================================
FILE: app/assets/components/JsonSchemaForm/components/fields/MultiSchemaField.js
================================================
import React, { Component } from "react";
import PropTypes from "prop-types";
import * as types from "../../types";
import { guessType } from "../../utils";
import { isValid } from "../../validate";

class AnyOfField extends Component {
  constructor(props) {
    super(props);

    const { formData, options } = this.props;

    this.state = {
      selectedOption: this.getMatchingOption(formData, options),
    };
  }

  componentWillReceiveProps(nextProps) {
    const matchingOption = this.getMatchingOption(
      nextProps.formData,
      nextProps.options
    );

    if (matchingOption === this.state.selectedOption) {
      return;
    }

    this.setState({ selectedOption: matchingOption });
  }

  getMatchingOption(formData, options) {
    for (let i = 0; i < options.length; i++) {
      const option = options[i];

      // If the schema describes an object then we need to add slightly more
      // strict matching to the schema, because unless the schema uses the
      // "requires" keyword, an object will match the schema as long as it
      // doesn't have matching keys with a conflicting type. To do this we use an
      // "anyOf" with an array of requires. This augmentation expresses that the
      // schema should match if any of the keys in the schema are present on the
      // object and pass validation.
      if (option.properties) {
        // Create an "anyOf" schema that requires at least one of the keys in the
        // "properties" object
        const requiresAnyOf = {
          anyOf: Object.keys(option.properties).map(key => ({
            required: [key],
          })),
        };

        let augmentedSchema;

        // If the "anyOf" keyword already exists, wrap the augmentation in an "allOf"
        if (option.anyOf) {
          // Create a shallow clone of the option
          const { .
Download .txt
gitextract_m6r3lqby/

├── .babelrc.js
├── .config.js
├── .gitignore
├── .webpackrc.js
├── LICENSE
├── README.md
├── app/
│   ├── assets/
│   │   ├── common/
│   │   │   ├── menu.js
│   │   │   └── router.js
│   │   ├── components/
│   │   │   ├── ActiveChart/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── Authorized/
│   │   │   │   ├── Authorized.js
│   │   │   │   ├── AuthorizedRoute.js
│   │   │   │   ├── CheckPermissions.js
│   │   │   │   ├── CheckPermissions.test.js
│   │   │   │   ├── PromiseRender.js
│   │   │   │   ├── Secured.js
│   │   │   │   ├── demo/
│   │   │   │   │   ├── AuthorizedArray.md
│   │   │   │   │   ├── AuthorizedFunction.md
│   │   │   │   │   ├── basic.md
│   │   │   │   │   └── secured.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   └── index.md
│   │   │   ├── AvatarList/
│   │   │   │   ├── AvatarItem.d.ts
│   │   │   │   ├── demo/
│   │   │   │   │   └── simple.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── Charts/
│   │   │   │   ├── Bar/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   └── index.js
│   │   │   │   ├── ChartCard/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── Field/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── Gauge/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   └── index.js
│   │   │   │   ├── MiniArea/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   └── index.js
│   │   │   │   ├── MiniBar/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   └── index.js
│   │   │   │   ├── MiniProgress/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── Pie/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── Radar/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── TagCloud/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── TimelineChart/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── WaterWave/
│   │   │   │   │   ├── index.d.ts
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.less
│   │   │   │   ├── autoHeight.js
│   │   │   │   ├── demo/
│   │   │   │   │   ├── bar.md
│   │   │   │   │   ├── chart-card.md
│   │   │   │   │   ├── gauge.md
│   │   │   │   │   ├── mini-area.md
│   │   │   │   │   ├── mini-bar.md
│   │   │   │   │   ├── mini-pie.md
│   │   │   │   │   ├── mini-progress.md
│   │   │   │   │   ├── mix.md
│   │   │   │   │   ├── pie.md
│   │   │   │   │   ├── radar.md
│   │   │   │   │   ├── tag-cloud.md
│   │   │   │   │   ├── timeline-chart.md
│   │   │   │   │   └── waterwave.md
│   │   │   │   ├── g2.js
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── CountDown/
│   │   │   │   ├── demo/
│   │   │   │   │   └── simple.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── DescriptionList/
│   │   │   │   ├── Description.d.ts
│   │   │   │   ├── Description.js
│   │   │   │   ├── DescriptionList.js
│   │   │   │   ├── demo/
│   │   │   │   │   ├── basic.md
│   │   │   │   │   └── vertical.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   ├── index.zh-CN.md
│   │   │   │   └── responsive.js
│   │   │   ├── EditableItem/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── EditableLinkGroup/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── Ellipsis/
│   │   │   │   ├── demo/
│   │   │   │   │   ├── line.md
│   │   │   │   │   └── number.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── Exception/
│   │   │   │   ├── demo/
│   │   │   │   │   ├── 403.md
│   │   │   │   │   ├── 404.md
│   │   │   │   │   └── 500.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   ├── index.zh-CN.md
│   │   │   │   └── typeConfig.js
│   │   │   ├── FooterToolbar/
│   │   │   │   ├── demo/
│   │   │   │   │   └── basic.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── GlobalFooter/
│   │   │   │   ├── demo/
│   │   │   │   │   └── basic.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── GlobalHeader/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── HeaderSearch/
│   │   │   │   ├── demo/
│   │   │   │   │   └── basic.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── JsonSchemaForm/
│   │   │   │   ├── components/
│   │   │   │   │   ├── AddButton.js
│   │   │   │   │   ├── ErrorList.js
│   │   │   │   │   ├── Form.js
│   │   │   │   │   ├── IconButton.js
│   │   │   │   │   ├── fields/
│   │   │   │   │   │   ├── ArrayField.js
│   │   │   │   │   │   ├── BooleanField.js
│   │   │   │   │   │   ├── DescriptionField.js
│   │   │   │   │   │   ├── MultiSchemaField.js
│   │   │   │   │   │   ├── NumberField.js
│   │   │   │   │   │   ├── ObjectField.js
│   │   │   │   │   │   ├── SchemaField.js
│   │   │   │   │   │   ├── StringField.js
│   │   │   │   │   │   ├── TitleField.js
│   │   │   │   │   │   ├── UnsupportedField.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── widgets/
│   │   │   │   │       ├── AltDateTimeWidget.js
│   │   │   │   │       ├── AltDateWidget.js
│   │   │   │   │       ├── BaseInput.js
│   │   │   │   │       ├── CheckboxWidget.js
│   │   │   │   │       ├── CheckboxesWidget.js
│   │   │   │   │       ├── ColorWidget.js
│   │   │   │   │       ├── DateTimeWidget.js
│   │   │   │   │       ├── DateWidget.js
│   │   │   │   │       ├── EmailWidget.js
│   │   │   │   │       ├── FileWidget.js
│   │   │   │   │       ├── HiddenWidget.js
│   │   │   │   │       ├── PasswordWidget.js
│   │   │   │   │       ├── RadioWidget.js
│   │   │   │   │       ├── RangeWidget.js
│   │   │   │   │       ├── SelectWidget.js
│   │   │   │   │       ├── TextWidget.js
│   │   │   │   │       ├── TextareaWidget.js
│   │   │   │   │       ├── URLWidget.js
│   │   │   │   │       ├── UpDownWidget.js
│   │   │   │   │       └── index.js
│   │   │   │   ├── constants.js
│   │   │   │   ├── index.js
│   │   │   │   ├── types.js
│   │   │   │   ├── utils.js
│   │   │   │   └── validate.js
│   │   │   ├── Login/
│   │   │   │   ├── LoginItem.js
│   │   │   │   ├── LoginSubmit.js
│   │   │   │   ├── LoginTab.js
│   │   │   │   ├── demo/
│   │   │   │   │   └── basic.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   ├── index.zh-CN.md
│   │   │   │   └── map.js
│   │   │   ├── NoticeIcon/
│   │   │   │   ├── NoticeIconTab.d.ts
│   │   │   │   ├── NoticeList.js
│   │   │   │   ├── NoticeList.less
│   │   │   │   ├── demo/
│   │   │   │   │   ├── basic.md
│   │   │   │   │   └── popover.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── NumberInfo/
│   │   │   │   ├── demo/
│   │   │   │   │   └── basic.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.en-US.md
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── PageHeader/
│   │   │   │   ├── demo/
│   │   │   │   │   ├── image.md
│   │   │   │   │   ├── simple.md
│   │   │   │   │   ├── standard.md
│   │   │   │   │   └── structure.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   ├── index.md
│   │   │   │   └── index.test.js
│   │   │   ├── Result/
│   │   │   │   ├── demo/
│   │   │   │   │   ├── classic.md
│   │   │   │   │   ├── error.md
│   │   │   │   │   └── structure.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── SiderMenu/
│   │   │   │   ├── SiderMenu.js
│   │   │   │   ├── SilderMenu.test.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── StandardFormRow/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── StandardTable/
│   │   │   │   ├── index.js
│   │   │   │   └── index.less
│   │   │   ├── TagSelect/
│   │   │   │   ├── TagSelectOption.d.ts
│   │   │   │   ├── demo/
│   │   │   │   │   ├── expandable.md
│   │   │   │   │   └── simple.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   ├── Trend/
│   │   │   │   ├── demo/
│   │   │   │   │   ├── basic.md
│   │   │   │   │   └── reverse.md
│   │   │   │   ├── index.d.ts
│   │   │   │   ├── index.js
│   │   │   │   ├── index.less
│   │   │   │   └── index.md
│   │   │   └── _utils/
│   │   │       ├── pathTools.js
│   │   │       └── pathTools.test.js
│   │   ├── custom/
│   │   │   └── components/
│   │   │       └── Editor.js
│   │   ├── e2e/
│   │   │   ├── home.e2e.js
│   │   │   └── login.e2e.js
│   │   ├── index.ejs
│   │   ├── index.js
│   │   ├── index.less
│   │   ├── layouts/
│   │   │   ├── BasicLayout.js
│   │   │   ├── BlankLayout.js
│   │   │   ├── PageHeaderLayout.js
│   │   │   ├── PageHeaderLayout.less
│   │   │   ├── UserLayout.js
│   │   │   └── UserLayout.less
│   │   ├── models/
│   │   │   ├── error.js
│   │   │   ├── global.js
│   │   │   ├── index.js
│   │   │   ├── login.js
│   │   │   ├── register.js
│   │   │   └── user.js
│   │   ├── rollbar.js
│   │   ├── router.js
│   │   ├── routes/
│   │   │   ├── Development/
│   │   │   │   ├── App.js
│   │   │   │   ├── App.less
│   │   │   │   ├── Module.js
│   │   │   │   ├── Module.less
│   │   │   │   ├── Param.js
│   │   │   │   ├── Param.less
│   │   │   │   ├── Schema.js
│   │   │   │   └── Schema.less
│   │   │   ├── Exception/
│   │   │   │   ├── 403.js
│   │   │   │   ├── 404.js
│   │   │   │   ├── 500.js
│   │   │   │   ├── style.less
│   │   │   │   └── triggerException.js
│   │   │   ├── Operations/
│   │   │   │   ├── App.js
│   │   │   │   ├── App.less
│   │   │   │   ├── Data.js
│   │   │   │   ├── Data.less
│   │   │   │   ├── Module.js
│   │   │   │   └── Module.less
│   │   │   ├── Result/
│   │   │   │   ├── Error.js
│   │   │   │   ├── Success.js
│   │   │   │   └── Success.test.js
│   │   │   └── User/
│   │   │       ├── Login.js
│   │   │       ├── Login.less
│   │   │       ├── Register.js
│   │   │       ├── Register.less
│   │   │       ├── RegisterResult.js
│   │   │       └── RegisterResult.less
│   │   ├── services/
│   │   │   ├── api.js
│   │   │   ├── error.js
│   │   │   └── user.js
│   │   ├── theme.js
│   │   └── utils/
│   │       ├── Authorized.js
│   │       ├── authority.js
│   │       ├── ca.js
│   │       ├── constants.js
│   │       ├── fetch.js
│   │       ├── request.js
│   │       ├── url.js
│   │       ├── utils.js
│   │       └── utils.less
│   ├── controller/
│   │   ├── application.js
│   │   ├── auth.js
│   │   ├── data.js
│   │   ├── home.js
│   │   ├── module.js
│   │   ├── param.js
│   │   ├── put.js
│   │   └── user.js
│   ├── lib/
│   │   └── AliOSS.js
│   ├── middleware/
│   │   └── auth.js
│   ├── model/
│   │   ├── application.js
│   │   ├── auth.js
│   │   ├── data.js
│   │   ├── module.js
│   │   ├── param.js
│   │   └── user.js
│   ├── public/
│   │   ├── index.3e1a724e.css
│   │   ├── index.3eaede4e.js
│   │   └── index.html
│   ├── router.js
│   └── util/
│       ├── common.js
│       ├── response.js
│       └── utils.js
├── config/
│   ├── config.default.js
│   ├── manifest.json
│   └── plugin.js
├── database/
│   ├── dms.sql
│   └── init.sql
├── package.json
└── webpack.config.js
Download .txt
Showing preview only (357K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3910 symbols across 142 files)

FILE: app/assets/common/menu.js
  function formatter (line 28) | function formatter(data, parentPath = '/', parentAuthority) {

FILE: app/assets/common/router.js
  function getFlatMenuData (line 57) | function getFlatMenuData(menus) {

FILE: app/assets/components/ActiveChart/index.js
  function fixedZero (line 8) | function fixedZero(val) {
  function getActiveData (line 12) | function getActiveData() {
  class ActiveChart (line 23) | class ActiveChart extends Component {
    method componentDidMount (line 28) | componentDidMount() {
    method componentWillUnmount (line 36) | componentWillUnmount() {
    method render (line 40) | render() {

FILE: app/assets/components/Authorized/Authorized.js
  class Authorized (line 4) | class Authorized extends React.Component {
    method render (line 5) | render() {

FILE: app/assets/components/Authorized/AuthorizedRoute.js
  class AuthorizedRoute (line 5) | class AuthorizedRoute extends React.Component {
    method render (line 6) | render() {

FILE: app/assets/components/Authorized/CheckPermissions.js
  function isPromise (line 5) | function isPromise(obj) {

FILE: app/assets/components/Authorized/PromiseRender.js
  class PromiseRender (line 4) | class PromiseRender extends React.PureComponent {
    method componentDidMount (line 8) | componentDidMount() {
    method componentWillReceiveProps (line 11) | componentWillReceiveProps(nextProps) {
    method setRenderComponent (line 16) | setRenderComponent(props) {
    method render (line 41) | render() {

FILE: app/assets/components/Authorized/index.d.ts
  type authorityFN (line 4) | type authorityFN = (currentAuthority?: string) => boolean;
  type authority (line 6) | type authority = string | Array<string> | authorityFN | Promise<any>;
  type IReactComponent (line 8) | type IReactComponent<P = any> =
  type Secured (line 13) | interface Secured {
  type AuthorizedRouteProps (line 17) | interface AuthorizedRouteProps extends RouteProps {
  class AuthorizedRoute (line 20) | class AuthorizedRoute extends React.Component<AuthorizedRouteProps, any> {}
  type check (line 22) | interface check {
  type AuthorizedProps (line 30) | interface AuthorizedProps {
  class Authorized (line 35) | class Authorized extends React.Component<AuthorizedProps, any> {

FILE: app/assets/components/Authorized/index.js
  constant CURRENT (line 7) | let CURRENT = 'NULL';

FILE: app/assets/components/AvatarList/AvatarItem.d.ts
  type IAvatarItemProps (line 2) | interface IAvatarItemProps {
  class AvatarItem (line 8) | class AvatarItem extends React.Component<IAvatarItemProps, any> {

FILE: app/assets/components/AvatarList/index.d.ts
  type IAvatarListProps (line 4) | interface IAvatarListProps {
  class AvatarList (line 10) | class AvatarList extends React.Component<IAvatarListProps, any> {

FILE: app/assets/components/Charts/Bar/index.d.ts
  type IBarProps (line 2) | interface IBarProps {
  class Bar (line 15) | class Bar extends React.Component<IBarProps, any> {}

FILE: app/assets/components/Charts/Bar/index.js
  class Bar (line 8) | @autoHeight()
    method componentDidMount (line 14) | componentDidMount() {
    method componentWillUnmount (line 18) | componentWillUnmount() {
    method resize (line 22) | @Bind()
    method render (line 57) | render() {

FILE: app/assets/components/Charts/ChartCard/index.d.ts
  type IChartCardProps (line 2) | interface IChartCardProps {
  class ChartCard (line 12) | class ChartCard extends React.Component<IChartCardProps, any> {}

FILE: app/assets/components/Charts/Field/index.d.ts
  type IFieldProps (line 2) | interface IFieldProps {
  class Field (line 8) | class Field extends React.Component<IFieldProps, any> {}

FILE: app/assets/components/Charts/Gauge/index.d.ts
  type IGaugeProps (line 2) | interface IGaugeProps {
  class Gauge (line 11) | class Gauge extends React.Component<IGaugeProps, any> {}

FILE: app/assets/components/Charts/Gauge/index.js
  method drawShape (line 23) | drawShape(cfg, group) {
  class Gauge (line 55) | class Gauge extends React.Component {
    method render (line 56) | render() {

FILE: app/assets/components/Charts/MiniArea/index.d.ts
  type IAxis (line 6) | interface IAxis {
  type IMiniAreaProps (line 15) | interface IMiniAreaProps {
  class MiniArea (line 29) | class MiniArea extends React.Component<IMiniAreaProps, any> {}

FILE: app/assets/components/Charts/MiniArea/index.js
  class MiniArea (line 7) | class MiniArea extends React.Component {
    method render (line 8) | render() {

FILE: app/assets/components/Charts/MiniBar/index.d.ts
  type IMiniBarProps (line 2) | interface IMiniBarProps {
  class MiniBar (line 12) | class MiniBar extends React.Component<IMiniBarProps, any> {}

FILE: app/assets/components/Charts/MiniBar/index.js
  class MiniBar (line 7) | class MiniBar extends React.Component {
    method render (line 8) | render() {

FILE: app/assets/components/Charts/MiniProgress/index.d.ts
  type IMiniProgressProps (line 2) | interface IMiniProgressProps {
  class MiniProgress (line 10) | class MiniProgress extends React.Component<IMiniProgressProps, any> {}

FILE: app/assets/components/Charts/Pie/index.d.ts
  type IPieProps (line 2) | interface IPieProps {
  class Pie (line 20) | class Pie extends React.Component<IPieProps, any> {}

FILE: app/assets/components/Charts/Pie/index.js
  class Pie (line 15) | class Pie extends Component {
    method componentDidMount (line 21) | componentDidMount() {
    method componentWillReceiveProps (line 27) | componentWillReceiveProps(nextProps) {
    method componentWillUnmount (line 42) | componentWillUnmount() {
    method resize (line 71) | @Bind()
    method render (line 114) | render() {

FILE: app/assets/components/Charts/Radar/index.d.ts
  type IRadarProps (line 2) | interface IRadarProps {
  class Radar (line 15) | class Radar extends React.Component<IRadarProps, any> {}

FILE: app/assets/components/Charts/Radar/index.js
  class Radar (line 9) | class Radar extends Component {
    method componentDidMount (line 14) | componentDidMount() {
    method componentWillReceiveProps (line 18) | componentWillReceiveProps(nextProps) {
    method render (line 75) | render() {

FILE: app/assets/components/Charts/TagCloud/index.d.ts
  type ITagCloudProps (line 2) | interface ITagCloudProps {
  class TagCloud (line 11) | class TagCloud extends React.Component<ITagCloudProps, any> {}

FILE: app/assets/components/Charts/TagCloud/index.js
  class TagCloud (line 15) | @autoHeight()
    method componentDidMount (line 21) | componentDidMount() {
    method componentWillReceiveProps (line 27) | componentWillReceiveProps(nextProps) {
    method componentWillUnmount (line 33) | componentWillUnmount() {
    method getTextAttrs (line 47) | function getTextAttrs(cfg) {
    method drawShape (line 66) | drawShape(cfg, container) {
    method renderChart (line 78) | @Bind()
    method render (line 134) | render() {

FILE: app/assets/components/Charts/TimelineChart/index.d.ts
  type ITimelineChartProps (line 2) | interface ITimelineChartProps {
  class TimelineChart (line 14) | class TimelineChart extends React.Component<ITimelineChartProps, any> {}

FILE: app/assets/components/Charts/TimelineChart/index.js
  class TimelineChart (line 9) | class TimelineChart extends React.Component {
    method render (line 10) | render() {

FILE: app/assets/components/Charts/WaterWave/index.d.ts
  type IWaterWaveProps (line 2) | interface IWaterWaveProps {
  class WaterWave (line 10) | class WaterWave extends React.Component<IWaterWaveProps, any> {}

FILE: app/assets/components/Charts/WaterWave/index.js
  class WaterWave (line 10) | class WaterWave extends PureComponent {
    method componentDidMount (line 15) | componentDidMount() {
    method componentWillUnmount (line 22) | componentWillUnmount() {
    method renderChart (line 38) | renderChart() {
    method render (line 173) | render() {

FILE: app/assets/components/Charts/autoHeight.js
  function computeHeight (line 4) | function computeHeight(node) {
  function getAutoHeight (line 12) | function getAutoHeight(n) {
  method componentDidMount (line 39) | componentDidMount() {
  method render (line 52) | render() {

FILE: app/assets/components/CountDown/index.d.ts
  type ICountDownProps (line 2) | interface ICountDownProps {
  class CountDown (line 9) | class CountDown extends React.Component<ICountDownProps, any> {}

FILE: app/assets/components/CountDown/index.js
  function fixedZero (line 3) | function fixedZero(val) {
  class CountDown (line 7) | class CountDown extends Component {
    method constructor (line 8) | constructor(props) {
    method componentDidMount (line 18) | componentDidMount() {
    method componentWillReceiveProps (line 22) | componentWillReceiveProps(nextProps) {
    method componentWillUnmount (line 37) | componentWillUnmount() {
    method render (line 108) | render() {

FILE: app/assets/components/DescriptionList/Description.d.ts
  class Description (line 3) | class Description extends React.Component<

FILE: app/assets/components/DescriptionList/index.d.ts
  type IDescriptionListProps (line 4) | interface IDescriptionListProps {
  class DescriptionList (line 13) | class DescriptionList extends React.Component<IDescriptionListProps, any> {

FILE: app/assets/components/EditableItem/index.js
  class EditableItem (line 5) | class EditableItem extends PureComponent {
    method render (line 23) | render() {

FILE: app/assets/components/EditableLinkGroup/index.js
  class EditableLinkGroup (line 8) | class EditableLinkGroup extends PureComponent {
    method render (line 21) | render() {

FILE: app/assets/components/Ellipsis/index.d.ts
  type IEllipsisProps (line 2) | interface IEllipsisProps {
  class Ellipsis (line 10) | class Ellipsis extends React.Component<IEllipsisProps, any> {}

FILE: app/assets/components/Ellipsis/index.js
  class Ellipsis (line 45) | class Ellipsis extends Component {
    method componentDidMount (line 51) | componentDidMount() {
    method componentWillReceiveProps (line 57) | componentWillReceiveProps(nextProps) {
    method render (line 148) | render() {

FILE: app/assets/components/Exception/index.d.ts
  type IExceptionProps (line 2) | interface IExceptionProps {
  class Exception (line 12) | class Exception extends React.Component<IExceptionProps, any> {}

FILE: app/assets/components/FooterToolbar/index.d.ts
  type IFooterToolbarProps (line 2) | interface IFooterToolbarProps {
  class FooterToolbar (line 7) | class FooterToolbar extends React.Component<IFooterToolbarProps, any> {}

FILE: app/assets/components/FooterToolbar/index.js
  class FooterToolbar (line 5) | class FooterToolbar extends Component {
    method render (line 6) | render() {

FILE: app/assets/components/GlobalFooter/index.d.ts
  type IGlobalFooterProps (line 2) | interface IGlobalFooterProps {
  class GlobalFooter (line 13) | class GlobalFooter extends React.Component<IGlobalFooterProps, any> {}

FILE: app/assets/components/GlobalHeader/index.js
  class GlobalHeader (line 11) | class GlobalHeader extends PureComponent {
    method componentWillUnmount (line 12) | componentWillUnmount() {
    method triggerResizeEvent (line 21) | @Debounce(600)
    method render (line 35) | render() {

FILE: app/assets/components/HeaderSearch/index.d.ts
  type IHeaderSearchProps (line 2) | interface IHeaderSearchProps {
  class HeaderSearch (line 11) | class HeaderSearch extends React.Component<IHeaderSearchProps, any> {}

FILE: app/assets/components/HeaderSearch/index.js
  class HeaderSearch (line 7) | class HeaderSearch extends PureComponent {
    method componentWillUnmount (line 30) | componentWillUnmount() {
    method render (line 59) | render() {

FILE: app/assets/components/JsonSchemaForm/components/AddButton.js
  function AddButton (line 4) | function AddButton({ className, onClick, disabled }) {

FILE: app/assets/components/JsonSchemaForm/components/ErrorList.js
  function ErrorList (line 3) | function ErrorList(props) {

FILE: app/assets/components/JsonSchemaForm/components/Form.js
  class Form (line 16) | class Form extends Component {
    method constructor (line 27) | constructor(props) {
    method componentWillReceiveProps (line 39) | componentWillReceiveProps(nextProps) {
    method getStateFromProps (line 51) | getStateFromProps(props) {
    method shouldComponentUpdate (line 87) | shouldComponentUpdate(nextProps, nextState) {
    method validate (line 91) | validate(
    method renderErrors (line 108) | renderErrors() {
    method getRegistry (line 183) | getRegistry() {
    method submit (line 198) | submit() {
    method render (line 204) | render() {

FILE: app/assets/components/JsonSchemaForm/components/IconButton.js
  function IconButton (line 3) | function IconButton(props) {

FILE: app/assets/components/JsonSchemaForm/components/fields/ArrayField.js
  function ArrayFieldTitle (line 22) | function ArrayFieldTitle({ TitleField, idSchema, title, required }) {
  function ArrayFieldDescription (line 30) | function ArrayFieldDescription({ DescriptionField, idSchema, description...
  function DefaultArrayItem (line 39) | function DefaultArrayItem(props) {
  function DefaultFixedArrayFieldTemplate (line 102) | function DefaultFixedArrayFieldTemplate(props) {
  function DefaultNormalArrayFieldTemplate (line 138) | function DefaultNormalArrayFieldTemplate(props) {
  class ArrayField (line 177) | class ArrayField extends Component {
    method itemTitle (line 188) | get itemTitle() {
    method isItemRequired (line 193) | isItemRequired(itemSchema) {
    method canAddItem (line 203) | canAddItem(formItems) {
    method reOrderArray (line 278) | function reOrderArray() {
    method render (line 317) | render() {
    method renderNormalArray (line 346) | renderNormalArray() {
    method renderMultiSelect (line 416) | renderMultiSelect() {
    method renderFiles (line 459) | renderFiles() {
    method renderFixedArray (line 499) | renderFixedArray() {
    method renderArrayFieldItem (line 592) | renderArrayFieldItem(props) {

FILE: app/assets/components/JsonSchemaForm/components/fields/BooleanField.js
  function BooleanField (line 11) | function BooleanField(props) {

FILE: app/assets/components/JsonSchemaForm/components/fields/DescriptionField.js
  function DescriptionField (line 4) | function DescriptionField(props) {

FILE: app/assets/components/JsonSchemaForm/components/fields/MultiSchemaField.js
  class AnyOfField (line 7) | class AnyOfField extends Component {
    method constructor (line 8) | constructor(props) {
    method componentWillReceiveProps (line 18) | componentWillReceiveProps(nextProps) {
    method getMatchingOption (line 31) | getMatchingOption(formData, options) {
    method render (line 126) | render() {

FILE: app/assets/components/JsonSchemaForm/components/fields/NumberField.js
  class NumberField (line 35) | class NumberField extends React.Component {
    method constructor (line 36) | constructor(props) {
    method render (line 65) | render() {

FILE: app/assets/components/JsonSchemaForm/components/fields/ObjectField.js
  function DefaultObjectFieldTemplate (line 13) | function DefaultObjectFieldTemplate(props) {
  class ObjectField (line 61) | class ObjectField extends Component {
    method isRequired (line 76) | isRequired(name) {
    method getDefaultValue (line 150) | getDefaultValue(type) {
    method render (line 179) | render() {

FILE: app/assets/components/JsonSchemaForm/components/fields/SchemaField.js
  constant REQUIRED_FIELD_SYMBOL (line 21) | const REQUIRED_FIELD_SYMBOL = "*";
  constant COMPONENT_TYPES (line 22) | const COMPONENT_TYPES = {
  function getFieldComponent (line 31) | function getFieldComponent(schema, uiSchema, idSchema, fields) {
  function Label (line 61) | function Label(props) {
  function LabelInput (line 74) | function LabelInput(props) {
  function Help (line 87) | function Help(props) {
  function ErrorList (line 98) | function ErrorList(props) {
  function DefaultTemplate (line 120) | function DefaultTemplate(props) {
  function WrapIfAdditional (line 174) | function WrapIfAdditional(props) {
  function SchemaFieldRender (line 226) | function SchemaFieldRender(props) {
  class SchemaField (line 395) | class SchemaField extends React.Component {
    method shouldComponentUpdate (line 396) | shouldComponentUpdate(nextProps, nextState) {
    method render (line 405) | render() {

FILE: app/assets/components/JsonSchemaForm/components/fields/StringField.js
  function StringField (line 12) | function StringField(props) {

FILE: app/assets/components/JsonSchemaForm/components/fields/TitleField.js
  constant REQUIRED_FIELD_SYMBOL (line 4) | const REQUIRED_FIELD_SYMBOL = "*";
  function TitleField (line 6) | function TitleField(props) {

FILE: app/assets/components/JsonSchemaForm/components/fields/UnsupportedField.js
  function UnsupportedField (line 4) | function UnsupportedField({ schema, idSchema, reason }) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/AltDateTimeWidget.js
  function AltDateTimeWidget (line 5) | function AltDateTimeWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/AltDateWidget.js
  function rangeOptions (line 6) | function rangeOptions(start, stop) {
  function readyForChange (line 14) | function readyForChange(state) {
  function DateElement (line 18) | function DateElement(props) {
  class AltDateWidget (line 50) | class AltDateWidget extends Component {
    method constructor (line 61) | constructor(props) {
    method componentWillReceiveProps (line 66) | componentWillReceiveProps(nextProps) {
    method shouldComponentUpdate (line 70) | shouldComponentUpdate(nextProps, nextState) {
    method dateElementProps (line 105) | get dateElementProps() {
    method render (line 127) | render() {

FILE: app/assets/components/JsonSchemaForm/components/widgets/BaseInput.js
  function BaseInput (line 4) | function BaseInput(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/CheckboxWidget.js
  function schemaRequiresTrueValue (line 6) | function schemaRequiresTrueValue(schema) {
  function CheckboxWidget (line 34) | function CheckboxWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/CheckboxesWidget.js
  function selectValue (line 4) | function selectValue(value, selected, all) {
  function deselectValue (line 12) | function deselectValue(value, selected) {
  function CheckboxesWidget (line 16) | function CheckboxesWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/ColorWidget.js
  function ColorWidget (line 4) | function ColorWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/DateTimeWidget.js
  function utcToLocal (line 5) | function utcToLocal(jsonDate) {
  function localToUTC (line 29) | function localToUTC(dateString) {
  function DateTimeWidget (line 35) | function DateTimeWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/DateWidget.js
  function DateWidget (line 4) | function DateWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/EmailWidget.js
  function EmailWidget (line 4) | function EmailWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/FileWidget.js
  function addNameToDataURL (line 9) | function addNameToDataURL(dataURL, name) {
  function processFile (line 13) | function processFile(file) {
  function processFiles (line 30) | function processFiles(files) {
  class FilesInfo (line 34) | class FilesInfo extends Component {
    method render (line 35) | render() {
  class FileWidget (line 79) | class FileWidget extends Component {
    method constructor (line 80) | constructor(props) {
    method shouldComponentUpdate (line 88) | shouldComponentUpdate(nextProps, nextState) {
    method render (line 121) | render() {

FILE: app/assets/components/JsonSchemaForm/components/widgets/HiddenWidget.js
  function HiddenWidget (line 4) | function HiddenWidget({ id, value }) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/PasswordWidget.js
  function PasswordWidget (line 4) | function PasswordWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/RadioWidget.js
  function RadioWidget (line 4) | function RadioWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/RangeWidget.js
  function RangeWidget (line 6) | function RangeWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/SelectWidget.js
  function processValue (line 12) | function processValue(schema, value) {
  function getValue (line 38) | function getValue(event, multiple) {
  function SelectWidget (line 49) | function SelectWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/TextWidget.js
  function TextWidget (line 4) | function TextWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/TextareaWidget.js
  function TextareaWidget (line 4) | function TextareaWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/URLWidget.js
  function URLWidget (line 4) | function URLWidget(props) {

FILE: app/assets/components/JsonSchemaForm/components/widgets/UpDownWidget.js
  function UpDownWidget (line 6) | function UpDownWidget(props) {

FILE: app/assets/components/JsonSchemaForm/utils.js
  constant ADDITIONAL_PROPERTY_FLAG (line 7) | const ADDITIONAL_PROPERTY_FLAG = "__additional_property";
  function getDefaultRegistry (line 61) | function getDefaultRegistry() {
  function getSchemaType (line 70) | function getSchemaType(schema) {
  function getWidget (line 88) | function getWidget(schema, widget, registeredWidgets = {}) {
  function computeDefaults (line 130) | function computeDefaults(schema, parentDefaults, definitions = {}) {
  function getDefaultFormState (line 194) | function getDefaultFormState(_schema, formData, definitions = {}) {
  function getUiOptions (line 211) | function getUiOptions(uiSchema) {
  function isObject (line 235) | function isObject(thing) {
  function mergeObjects (line 239) | function mergeObjects(obj1, obj2, concatArrays = false) {
  function asNumber (line 256) | function asNumber(value) {
  function orderProperties (line 282) | function orderProperties(properties, order) {
  function isConstant (line 327) | function isConstant(schema) {
  function toConstant (line 334) | function toConstant(schema) {
  function isSelect (line 344) | function isSelect(_schema, definitions = {}) {
  function isMultiSelect (line 355) | function isMultiSelect(schema, definitions = {}) {
  function isFilesArray (line 362) | function isFilesArray(schema, uiSchema, definitions = {}) {
  function isFixedItems (line 372) | function isFixedItems(schema) {
  function allowAdditionalItems (line 380) | function allowAdditionalItems(schema) {
  function optionsList (line 387) | function optionsList(schema) {
  function findSchemaDefinition (line 403) | function findSchemaDefinition($ref, definitions = {}) {
  function stubExistingAdditionalProperties (line 449) | function stubExistingAdditionalProperties(
  function resolveSchema (line 477) | function resolveSchema(schema, definitions = {}, formData = {}) {
  function resolveReference (line 489) | function resolveReference(schema, definitions, formData) {
  function retrieveSchema (line 502) | function retrieveSchema(schema, definitions = {}, formData = {}) {
  function resolveDependencies (line 517) | function resolveDependencies(schema, definitions, formData) {
  function withDependentProperties (line 542) | function withDependentProperties(schema, additionallyRequired) {
  function withDependentSchema (line 552) | function withDependentSchema(
  function withExactlyOneSubschema (line 586) | function withExactlyOneSubschema(
  function mergeSchemas (line 627) | function mergeSchemas(schema1, schema2) {
  function isArguments (line 631) | function isArguments(object) {
  function deepEquals (line 635) | function deepEquals(a, b, ca = [], cb = []) {
  function shouldRender (line 712) | function shouldRender(comp, nextProps, nextState) {
  function toIdSchema (line 717) | function toIdSchema(
  function parseDateString (line 753) | function parseDateString(dateString, includeTime = true) {
  function toDateString (line 778) | function toDateString(
  function pad (line 787) | function pad(num, size) {
  function setState (line 795) | function setState(instance, state, callback) {
  function dataURItoBlob (line 805) | function dataURItoBlob(dataURI) {
  function rangeSpec (line 838) | function rangeSpec(schema) {

FILE: app/assets/components/JsonSchemaForm/validate.js
  function createAjvInstance (line 11) | function createAjvInstance() {
  function toErrorSchema (line 54) | function toErrorSchema(errors) {
  function toErrorList (line 105) | function toErrorList(errorSchema, fieldName = "root") {
  function createErrorHandler (line 125) | function createErrorHandler(formData) {
  function unwrapErrorHandler (line 148) | function unwrapErrorHandler(errorHandler) {
  function transformAjvErrors (line 163) | function transformAjvErrors(errors = []) {
  function validateFormData (line 189) | function validateFormData(
  function isValid (line 276) | function isValid(schema, data) {

FILE: app/assets/components/Login/LoginItem.js
  function generator (line 10) | function generator({ defaultProps, defaultRules, type }) {

FILE: app/assets/components/Login/LoginTab.js
  class LoginTab (line 15) | class LoginTab extends Component {
    method constructor (line 20) | constructor(props) {
    method componentWillMount (line 24) | componentWillMount() {
    method render (line 29) | render() {

FILE: app/assets/components/Login/index.d.ts
  type LoginProps (line 3) | interface LoginProps {
  type TabProps (line 10) | interface TabProps {
  class Tab (line 14) | class Tab extends React.Component<TabProps, any> {}
  type LoginItemProps (line 16) | interface LoginItemProps {
  class LoginItem (line 24) | class LoginItem extends React.Component<LoginItemProps, any> {}
  class Login (line 26) | class Login extends React.Component<LoginProps, any> {

FILE: app/assets/components/Login/index.js
  class Login (line 10) | class Login extends Component {
    method getChildContext (line 33) | getChildContext() {
    method render (line 75) | render() {

FILE: app/assets/components/NoticeIcon/NoticeIconTab.d.ts
  type INoticeIconData (line 2) | interface INoticeIconData {
  type INoticeIconTabProps (line 11) | interface INoticeIconTabProps {
  class NoticeIconTab (line 19) | class NoticeIconTab extends React.Component<INoticeIconTabProps, any> {}

FILE: app/assets/components/NoticeIcon/NoticeList.js
  function NoticeList (line 6) | function NoticeList({

FILE: app/assets/components/NoticeIcon/index.d.ts
  type INoticeIconProps (line 4) | interface INoticeIconProps {
  class NoticeIcon (line 26) | class NoticeIcon extends React.Component<INoticeIconProps, any> {

FILE: app/assets/components/NoticeIcon/index.js
  class NoticeIcon (line 9) | class NoticeIcon extends PureComponent {
    method constructor (line 23) | constructor(props) {
    method getNotificationBox (line 38) | getNotificationBox() {
    method render (line 69) | render() {

FILE: app/assets/components/NumberInfo/index.d.ts
  type INumberInfoProps (line 2) | interface INumberInfoProps {
  class NumberInfo (line 13) | class NumberInfo extends React.Component<INumberInfoProps, any> {}

FILE: app/assets/components/PageHeader/index.d.ts
  type IPageHeaderProps (line 2) | interface IPageHeaderProps {
  class PageHeader (line 20) | class PageHeader extends React.Component<IPageHeaderProps, any> {}

FILE: app/assets/components/PageHeader/index.js
  function getBreadcrumb (line 10) | function getBreadcrumb(breadcrumbNameMap, url) {
  class PageHeader (line 22) | class PageHeader extends PureComponent {
    method componentDidMount (line 34) | componentDidMount() {
    method componentDidUpdate (line 38) | componentDidUpdate(preProps) {
    method render (line 168) | render() {

FILE: app/assets/components/Result/index.d.ts
  type IResultProps (line 2) | interface IResultProps {
  class Result (line 11) | class Result extends React.Component<IResultProps, any> {}

FILE: app/assets/components/Result/index.js
  function Result (line 6) | function Result({

FILE: app/assets/components/SiderMenu/SiderMenu.js
  class SiderMenu (line 52) | class SiderMenu extends PureComponent {
    method constructor (line 53) | constructor(props) {
    method componentWillReceiveProps (line 61) | componentWillReceiveProps(nextProps) {
    method getDefaultCollapsedSubMenus (line 73) | getDefaultCollapsedSubMenus(props) {
    method render (line 193) | render() {

FILE: app/assets/components/StandardTable/index.js
  function initTotalList (line 5) | function initTotalList(columns) {
  class StandardTable (line 15) | class StandardTable extends PureComponent {
    method constructor (line 16) | constructor(props) {
    method componentWillReceiveProps (line 27) | componentWillReceiveProps(nextProps) {
    method render (line 64) | render() {

FILE: app/assets/components/TagSelect/TagSelectOption.d.ts
  type ITagSelectOptionProps (line 3) | interface ITagSelectOptionProps {
  class TagSelectOption (line 8) | class TagSelectOption extends React.Component<ITagSelectOptionProps, any...

FILE: app/assets/components/TagSelect/index.d.ts
  type ITagSelectProps (line 4) | interface ITagSelectProps {
  class TagSelect (line 11) | class TagSelect extends React.Component<ITagSelectProps, any> {

FILE: app/assets/components/TagSelect/index.js
  class TagSelect (line 17) | class TagSelect extends Component {
    method componentWillReceiveProps (line 22) | componentWillReceiveProps(nextProps) {
    method getAllTags (line 46) | getAllTags() {
    method render (line 81) | render() {

FILE: app/assets/components/Trend/index.d.ts
  type ITrendProps (line 3) | interface ITrendProps {
  class Trend (line 10) | class Trend extends React.Component<ITrendProps, any> {}

FILE: app/assets/components/_utils/pathTools.js
  function urlToList (line 2) | function urlToList(url) {

FILE: app/assets/custom/components/Editor.js
  class Editor (line 23) | class Editor extends Component {
    method constructor (line 24) | constructor(props) {
    method componentWillReceiveProps (line 29) | componentWillReceiveProps(props) {
    method shouldComponentUpdate (line 33) | shouldComponentUpdate(nextProps, nextState) {
    method render (line 48) | render() {

FILE: app/assets/layouts/BasicLayout.js
  class BasicLayout (line 87) | class BasicLayout extends React.PureComponent {
    method getChildContext (line 95) | getChildContext() {
    method componentDidMount (line 102) | componentDidMount() {
    method componentWillUnmount (line 112) | componentWillUnmount() {
    method getPageTitle (line 115) | getPageTitle() {
    method render (line 182) | render() {

FILE: app/assets/layouts/UserLayout.js
  class UserLayout (line 34) | class UserLayout extends React.PureComponent {
    method getPageTitle (line 35) | getPageTitle() {
    method render (line 44) | render() {

FILE: app/assets/models/error.js
  method query (line 13) | *query({ payload }, { call, put }) {
  method trigger (line 25) | trigger(state, action) {

FILE: app/assets/models/global.js
  method fetchNotices (line 12) | *fetchNotices(_, { call, put }) {
  method clearNotices (line 23) | *clearNotices({ payload }, { put, select }) {
  method changeLayoutCollapsed (line 37) | changeLayoutCollapsed(state, { payload }) {
  method saveNotices (line 43) | saveNotices(state, { payload }) {
  method saveClearedNotices (line 49) | saveClearedNotices(state, { payload }) {
  method setup (line 58) | setup({ history }) {

FILE: app/assets/models/login.js
  method login (line 14) | *login({ data }, { call, put }) {
  method logout (line 26) | *logout(_, { put, select }) {
  method changeLoginStatus (line 50) | changeLoginStatus(state, { resData }) {

FILE: app/assets/models/register.js
  method submit (line 13) | *submit(_, { call, put }) {
  method registerHandle (line 23) | registerHandle(state, { payload }) {

FILE: app/assets/models/user.js
  method fetch (line 12) | *fetch(_, { call, put }) {
  method fetchCurrent (line 19) | *fetchCurrent(_, { call, put }) {
  method save (line 29) | save(state, action) {
  method saveCurrentUser (line 35) | saveCurrentUser(state, action) {
  method changeNotifyCount (line 41) | changeNotifyCount(state, action) {

FILE: app/assets/router.js
  function RouterConfig (line 25) | function RouterConfig({ history, app }) {

FILE: app/assets/routes/Development/App.js
  class App (line 29) | class App extends PureComponent {
    method componentDidMount (line 45) | componentDidMount() {
    method render (line 198) | render() {

FILE: app/assets/routes/Development/Module.js
  class Module (line 25) | class Module extends PureComponent {
    method componentDidMount (line 35) | componentDidMount() {
    method render (line 104) | render() {

FILE: app/assets/routes/Development/Param.js
  class Param (line 47) | class Param extends PureComponent {
    method componentDidMount (line 59) | componentDidMount() {
    method render (line 168) | render() {

FILE: app/assets/routes/Development/Schema.js
  class Schema (line 23) | class Schema extends PureComponent {
    method componentDidMount (line 31) | componentDidMount() {
    method render (line 136) | render() {

FILE: app/assets/routes/Exception/triggerException.js
  class TriggerException (line 9) | class TriggerException extends PureComponent {
    method render (line 24) | render() {

FILE: app/assets/routes/Operations/App.js
  class App (line 28) | class App extends PureComponent {
    method componentDidMount (line 43) | componentDidMount() {
    method render (line 126) | render() {

FILE: app/assets/routes/Operations/Data.js
  class Data (line 23) | class Data extends PureComponent {
    method componentDidMount (line 32) | componentDidMount() {
    method render (line 99) | render() {

FILE: app/assets/routes/Operations/Module.js
  class Module (line 22) | class Module extends PureComponent {
    method componentDidMount (line 31) | componentDidMount() {
    method render (line 85) | render() {

FILE: app/assets/routes/User/Login.js
  class LoginPage (line 13) | class LoginPage extends Component {
    method render (line 40) | render() {

FILE: app/assets/routes/User/Register.js
  class Register (line 26) | class Register extends Component {
    method componentWillUnmount (line 35) | componentWillUnmount() {
    method render (line 122) | render() {

FILE: app/assets/services/api.js
  function login (line 4) | async function login(params) {
  function queryProjectNotice (line 13) | async function queryProjectNotice() {
  function queryActivities (line 17) | async function queryActivities() {
  function queryRule (line 21) | async function queryRule(params) {
  function removeRule (line 25) | async function removeRule(params) {
  function addRule (line 35) | async function addRule(params) {
  function fakeSubmitForm (line 45) | async function fakeSubmitForm(params) {
  function fakeChartData (line 52) | async function fakeChartData() {
  function queryTags (line 56) | async function queryTags() {
  function queryBasicProfile (line 60) | async function queryBasicProfile() {
  function queryAdvancedProfile (line 64) | async function queryAdvancedProfile() {
  function queryFakeList (line 68) | async function queryFakeList(params) {
  function fakeAccountLogin (line 72) | async function fakeAccountLogin(params) {
  function fakeRegister (line 79) | async function fakeRegister(params) {
  function queryNotices (line 86) | async function queryNotices() {

FILE: app/assets/services/error.js
  function query (line 3) | async function query(code) {

FILE: app/assets/services/user.js
  function query (line 3) | async function query() {
  function queryCurrent (line 7) | async function queryCurrent() {

FILE: app/assets/utils/authority.js
  function getAuthority (line 2) | function getAuthority() {
  function setAuthority (line 6) | function setAuthority(authority) {

FILE: app/assets/utils/request.js
  function checkStatus (line 23) | function checkStatus(response) {
  function request (line 45) | function request(url, options) {

FILE: app/assets/utils/utils.js
  function fixedZero (line 4) | function fixedZero(val) {
  function getTimeDistance (line 8) | function getTimeDistance(type) {
  function getPlainNode (line 56) | function getPlainNode(nodeList, parentPath = '') {
  function digitUppercase (line 74) | function digitUppercase(n) {
  function getRelation (line 100) | function getRelation(str1, str2) {
  function getRenderArr (line 114) | function getRenderArr(routes) {
  function getRoutes (line 136) | function getRoutes(path, routerData) {
  function isUrl (line 160) | function isUrl(path) {
  function b64DecodeUnicode (line 165) | function b64DecodeUnicode(str) {
  function shouldRender (line 169) | function shouldRender(comp, nextProps, nextState) {
  function deepEquals (line 174) | function deepEquals(a, b, ca = [], cb = []) {
  function isArguments (line 269) | function isArguments(object) {

FILE: app/controller/application.js
  class ApplicationController (line 9) | class ApplicationController extends Controller {
    method create (line 10) | async create() {
    method edit (line 44) | async edit() {
    method list (line 72) | async list() {
    method delete (line 114) | async delete() {

FILE: app/controller/auth.js
  class AuthController (line 8) | class AuthController extends Controller {
    method create (line 9) | async create() {
    method edit (line 35) | async edit() {
    method list (line 69) | async list() {
    method checkAuth (line 94) | async checkAuth(app_id) {

FILE: app/controller/data.js
  class DataController (line 12) | class DataController extends Controller {
    method editTempData (line 13) | async editTempData() {
    method reviewTempData (line 39) | async reviewTempData() {
    method getTempData (line 73) | async getTempData() {
    method checkAuth (line 99) | async checkAuth(app_id) {
    method saveAzureCdn (line 109) | async saveAzureCdn(params, data) {
    method saveAliOSS (line 129) | async saveAliOSS(params, data) {
    method saveJsonToCloud (line 136) | async saveJsonToCloud(params, data) {

FILE: app/controller/home.js
  class HomeController (line 9) | class HomeController extends Controller {
    method index (line 10) | async index() {
    method proxy (line 14) | async proxy() {
    method test (line 26) | test() {

FILE: app/controller/module.js
  class ModuleController (line 9) | class ModuleController extends Controller {
    method create (line 10) | async create() {
    method editDefinition (line 49) | async editDefinition() {
    method editAssociationUrl (line 83) | async editAssociationUrl() {
    method list (line 115) | async list() {
    method statusList (line 149) | async statusList() {
    method info (line 214) | async info() {
    method delete (line 235) | async delete() {
    method checkAuth (line 266) | async checkAuth(app_id) {

FILE: app/controller/param.js
  class ParamController (line 9) | class ParamController extends Controller {
    method create (line 10) | async create() {
    method edit (line 48) | async edit() {
    method list (line 82) | async list() {
    method selectList (line 115) | async selectList() {
    method delete (line 161) | async delete() {
    method info (line 193) | async info() {
    method checkAuth (line 208) | async checkAuth(app_id) {

FILE: app/controller/put.js
  class PutController (line 9) | class PutController extends Controller {
    method putFileByPath (line 10) | async putFileByPath() {

FILE: app/controller/user.js
  class UserController (line 11) | class UserController extends Controller {
    method login (line 12) | async login() {
    method create (line 29) | async create() {
    method edit (line 67) | async edit() {
    method logout (line 98) | logout() {
    method info (line 106) | async info() {
    method all (line 132) | async all() {
    method checkAuth (line 144) | async checkAuth(app_id) {
    method jwtAuth (line 154) | jwtAuth(ctx, user) {

FILE: app/lib/AliOSS.js
  constant OSS (line 1) | const OSS = require('ali-oss');
  class AliOSS (line 5) | class AliOSS {
    method constructor (line 6) | constructor() {
    method putJson (line 15) | async putJson(fileName, jsonStr) {
    method putFileByStream (line 25) | async putFileByStream(fileName, stream) {

FILE: app/public/index.3eaede4e.js
  function t (line 1) | function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{...
  function r (line 1) | function r(e){return e[a]={},o(e)}
  function o (line 1) | function o(e){return e[a]}
  function i (line 1) | function i(e){delete e[a]}
  function n (line 1) | function n(e){return o.call(e)}
  function r (line 1) | function r(e){var t=e.schema,n=e.idSchema,r=e.reason;return i.default.cr...
  function r (line 1) | function r(e){var t=e.schema,n=e.name,r=e.uiSchema,o=e.idSchema,i=e.form...
  function r (line 1) | function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function o (line 1) | function o(e,t,n){e.copy(t,n)}
  function e (line 1) | function e(){r(this,e),this.head=null,this.tail=null,this.length=0}
  function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
  function o (line 1) | function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function i (line 1) | function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
  function a (line 1) | function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function s (line 1) | function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function c (line 1) | function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function l (line 1) | function l(e,t,n){return t&&c(e.prototype,t),n&&c(e,n),e}
  function u (line 1) | function u(e,t){return!t||"object"!==o(t)&&"function"!=typeof t?h(e):t}
  function f (line 1) | function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function h (line 1) | function h(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function d (line 1) | function d(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function p (line 1) | function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e._...
  function t (line 1) | function t(e){var n;return s(this,t),n=u(this,f(t).call(this,e)),m.edito...
  function r (line 1) | function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function o (line 1) | function o(){return o=Object.assign||function(e){for(var t=1;t<arguments...
  function i (line 1) | function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function a (line 1) | function a(){return a=Object.assign||function(e){for(var t=1;t<arguments...
  function s (line 1) | function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function c (line 1) | function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function l (line 1) | function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function u (line 1) | function u(e,t,n){return t&&l(e.prototype,t),n&&l(e,n),e}
  function f (line 1) | function f(e,t){return!t||"object"!==i(t)&&"function"!=typeof t?h(e):t}
  function h (line 1) | function h(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function d (line 1) | function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function p (line 1) | function p(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function m (line 1) | function m(e,t){return(m=Object.setPrototypeOf||function(e,t){return e._...
  function t (line 1) | function t(){var e;return c(this,t),e=f(this,d(t).apply(this,arguments))...
  function r (line 1) | function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
  function n (line 1) | function n(){throw new TypeError("Invalid attempt to destructure non-ite...
  function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
  function r (line 1) | function r(e){if(!o(e))return i(e);var t=[];for(var n in Object(e))s.cal...
  function n (line 1) | function n(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t...
  function r (line 1) | function r(e,t,n,r,o,i,a,s){if(!e){if(e=void 0,void 0===t)e=Error("Minif...
  function o (line 1) | function o(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/e...
  function i (line 1) | function i(e,t,n,r,o,i,a,s,c){var l=Array.prototype.slice.call(arguments...
  function a (line 1) | function a(e,t,n,r,o,a,s,c,l){lo=!1,uo=null,i.apply(po,arguments)}
  function s (line 1) | function s(e,t,n,r,i,s,c,l,u){if(a.apply(this,arguments),lo){if(lo){var ...
  function c (line 1) | function c(){if(mo)for(var e in vo){var t=vo[e],n=mo.indexOf(e);if(-1<n|...
  function l (line 1) | function l(e,t,n){bo[e]&&o("100",e),bo[e]=t,wo[e]=t.eventTypes[n].depend...
  function u (line 1) | function u(e,t,n){var r=e.type||"unknown-event";e.currentTarget=xo(n),s(...
  function f (line 1) | function f(e,t){return null==t&&o("30"),null==e?t:Array.isArray(e)?Array...
  function h (line 1) | function h(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}
  function d (line 1) | function d(e){if(e){var t=e._dispatchListeners,n=e._dispatchInstances;if...
  function p (line 1) | function p(e,t){var n=e.stateNode;if(!n)return null;var r=Co(n);if(!r)re...
  function m (line 1) | function m(e){if(null!==e&&(So=f(So,e)),e=So,So=null,e&&(h(e,d),So&&o("9...
  function v (line 1) | function v(e){if(e[Oo])return e[Oo];for(;!e[Oo];){if(!e.parentNode)retur...
  function g (line 1) | function g(e){return e=e[Oo],!e||5!==e.tag&&6!==e.tag?null:e}
  function y (line 1) | function y(e){if(5===e.tag||6===e.tag)return e.stateNode;o("33")}
  function b (line 1) | function b(e){return e[Mo]||null}
  function w (line 1) | function w(e){do{e=e.return}while(e&&5!==e.tag);return e||null}
  function C (line 1) | function C(e,t,n){(t=p(e,n.dispatchConfig.phasedRegistrationNames[t]))&&...
  function E (line 1) | function E(e){if(e&&e.dispatchConfig.phasedRegistrationNames){for(var t=...
  function x (line 1) | function x(e,t,n){e&&n&&n.dispatchConfig.registrationName&&(t=p(e,n.disp...
  function S (line 1) | function S(e){e&&e.dispatchConfig.registrationName&&x(e._targetInst,null...
  function k (line 1) | function k(e){h(e,E)}
  function _ (line 1) | function _(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["We...
  function O (line 1) | function O(e){if(Fo[e])return Fo[e];if(!Po[e])return e;var t,n=Po[e];for...
  function M (line 1) | function M(){if(Ho)return Ho;var e,t,n=Io,r=n.length,o="value"in No?No.v...
  function A (line 1) | function A(){return!0}
  function P (line 1) | function P(){return!1}
  function F (line 1) | function F(e,t,n,r){this.dispatchConfig=e,this._targetInst=t,this.native...
  function z (line 1) | function z(e,t,n,r){if(this.eventPool.length){var o=this.eventPool.pop()...
  function T (line 1) | function T(e){e instanceof this||o("279"),e.destructor(),10>this.eventPo...
  function L (line 1) | function L(e){e.eventPool=[],e.getPooled=z,e.release=T}
  function D (line 1) | function D(e,t){switch(e){case"keyup":return-1!==$o.indexOf(t.keyCode);c...
  function j (line 1) | function j(e){return e=e.detail,"object"==typeof e&&"data"in e?e.data:null}
  function R (line 1) | function R(e,t){switch(e){case"compositionend":return j(t);case"keypress...
  function N (line 1) | function N(e,t){if(Xo)return"compositionend"===e||!Wo&&D(e,t)?(e=M(),Ho=...
  function I (line 1) | function I(e){if(e=Eo(e)){"function"!=typeof Zo&&o("280");var t=Co(e.sta...
  function H (line 1) | function H(e){ei?ti?ti.push(e):ti=[e]:ei=e}
  function V (line 1) | function V(){if(ei){var e=ei,t=ti;if(ti=ei=null,I(e),t)for(e=0;e<t.lengt...
  function B (line 1) | function B(e,t){return e(t)}
  function $ (line 1) | function $(e,t,n){return e(t,n)}
  function W (line 1) | function W(){}
  function U (line 1) | function U(e,t){if(ni)return e(t);ni=!0;try{return B(e,t)}finally{ni=!1,...
  function K (line 1) | function K(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input...
  function q (line 1) | function q(e){return e=e.target||e.srcElement||window,e.correspondingUse...
  function G (line 1) | function G(e){if(!Ao)return!1;e="on"+e;var t=e in document;return t||(t=...
  function Y (line 1) | function Y(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase...
  function Q (line 1) | function Q(e){var t=Y(e)?"checked":"value",n=Object.getOwnPropertyDescri...
  function X (line 1) | function X(e){e._valueTracker||(e._valueTracker=Q(e))}
  function J (line 1) | function J(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=...
  function Z (line 1) | function Z(e){return null===e||"object"!=typeof e?null:(e=bi&&e[bi]||e["...
  function ee (line 1) | function ee(e){if(null==e)return null;if("function"==typeof e)return e.d...
  function te (line 1) | function te(e){var t="";do{e:switch(e.tag){case 3:case 4:case 6:case 7:c...
  function ne (line 1) | function ne(e){return!!Ci.call(xi,e)||!Ci.call(Ei,e)&&(wi.test(e)?xi[e]=...
  function re (line 1) | function re(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){c...
  function oe (line 1) | function oe(e,t,n,r){if(null===t||void 0===t||re(e,t,n,r))return!0;if(r)...
  function ie (line 1) | function ie(e,t,n,r,o){this.acceptsBooleans=2===t||3===t||4===t,this.att...
  function ae (line 1) | function ae(e){return e[1].toUpperCase()}
  function se (line 1) | function se(e,t,n,r){var o=Si.hasOwnProperty(t)?Si[t]:null;(null!==o?0==...
  function ce (line 1) | function ce(e){switch(typeof e){case"boolean":case"number":case"object":...
  function le (line 1) | function le(e,t){var n=t.checked;return so({},t,{defaultChecked:void 0,d...
  function ue (line 1) | function ue(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t....
  function fe (line 1) | function fe(e,t){null!=(t=t.checked)&&se(e,"checked",t,!1)}
  function he (line 1) | function he(e,t){fe(e,t);var n=ce(t.value),r=t.type;if(null!=n)"number"=...
  function de (line 1) | function de(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defau...
  function pe (line 1) | function pe(e,t,n){"number"===t&&e.ownerDocument.activeElement===e||(nul...
  function me (line 1) | function me(e,t,n){return e=F.getPooled(_i.change,e,t,n),e.type="change"...
  function ve (line 1) | function ve(e){m(e)}
  function ge (line 1) | function ge(e){if(J(y(e)))return e}
  function ye (line 1) | function ye(e,t){if("change"===e)return t}
  function be (line 1) | function be(){Oi&&(Oi.detachEvent("onpropertychange",we),Mi=Oi=null)}
  function we (line 1) | function we(e){"value"===e.propertyName&&ge(Mi)&&(e=me(Mi,e,q(e)),U(ve,e))}
  function Ce (line 1) | function Ce(e,t,n){"focus"===e?(be(),Oi=t,Mi=n,Oi.attachEvent("onpropert...
  function Ee (line 1) | function Ee(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)retu...
  function xe (line 1) | function xe(e,t){if("click"===e)return ge(t)}
  function Se (line 1) | function Se(e,t){if("input"===e||"change"===e)return ge(t)}
  function ke (line 1) | function ke(e){var t=this.nativeEvent;return t.getModifierState?t.getMod...
  function _e (line 1) | function _e(){return ke}
  function Oe (line 1) | function Oe(e,t){return e===t&&(0!==e||1/e==1/t)||e!==e&&t!==t}
  function Me (line 1) | function Me(e,t){if(Oe(e,t))return!0;if("object"!=typeof e||null===e||"o...
  function Ae (line 1) | function Ae(e){var t=e;if(e.alternate)for(;t.return;)t=t.return;else{if(...
  function Pe (line 1) | function Pe(e){2!==Ae(e)&&o("188")}
  function Fe (line 1) | function Fe(e){var t=e.alternate;if(!t)return t=Ae(e),3===t&&o("188"),1=...
  function ze (line 1) | function ze(e){if(!(e=Fe(e)))return null;for(var t=e;;){if(5===t.tag||6=...
  function Te (line 1) | function Te(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&...
  function Le (line 1) | function Le(e,t){var n=e[0];e=e[1];var r="on"+(e[0].toUpperCase()+e.slic...
  function De (line 1) | function De(e){var t=e.targetInst,n=t;do{if(!n){e.ancestors.push(n);brea...
  function je (line 1) | function je(e,t){if(!t)return null;var n=(na(e)?Ne:Ie).bind(null,e);t.ad...
  function Re (line 1) | function Re(e,t){if(!t)return null;var n=(na(e)?Ne:Ie).bind(null,e);t.ad...
  function Ne (line 1) | function Ne(e,t){$(Ie,e,t)}
  function Ie (line 1) | function Ie(e,t){if(oa){var n=q(t);if(n=v(n),null===n||"number"!=typeof ...
  function He (line 1) | function He(e){return Object.prototype.hasOwnProperty.call(e,sa)||(e[sa]...
  function Ve (line 1) | function Ve(e){if(void 0===(e=e||("undefined"!=typeof document?document:...
  function Be (line 1) | function Be(e){for(;e&&e.firstChild;)e=e.firstChild;return e}
  function $e (line 1) | function $e(e,t){var n=Be(e);e=0;for(var r;n;){if(3===n.nodeType){if(r=e...
  function We (line 1) | function We(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===...
  function Ue (line 1) | function Ue(){for(var e=window,t=Ve();t instanceof e.HTMLIFrameElement;)...
  function Ke (line 1) | function Ke(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(...
  function qe (line 1) | function qe(){var e=Ue();if(Ke(e)){if("selectionStart"in e)var t={start:...
  function Ge (line 1) | function Ge(e){var t=Ue(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n...
  function Ye (line 1) | function Ye(e,t){var n=t.window===t?t.document:9===t.nodeType?t:t.ownerD...
  function Qe (line 1) | function Qe(e){var t="";return ao.Children.forEach(e,function(e){null!=e...
  function Xe (line 1) | function Xe(e,t){return e=so({children:void 0},t),(t=Qe(t.children))&&(e...
  function Je (line 1) | function Je(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t...
  function Ze (line 1) | function Ze(e,t){return null!=t.dangerouslySetInnerHTML&&o("91"),so({},t...
  function et (line 1) | function et(e,t){var n=t.value;null==n&&(n=t.defaultValue,t=t.children,n...
  function tt (line 1) | function tt(e,t){var n=ce(t.value),r=ce(t.defaultValue);null!=n&&(n=""+n...
  function nt (line 1) | function nt(e){var t=e.textContent;t===e._wrapperState.initialValue&&(e....
  function rt (line 1) | function rt(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";ca...
  function ot (line 1) | function ot(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?rt(t...
  function it (line 1) | function it(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.n...
  function at (line 1) | function at(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"nu...
  function st (line 1) | function st(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=...
  function ct (line 1) | function ct(e,t){t&&(wa[e]&&(null!=t.children||null!=t.dangerouslySetInn...
  function lt (line 1) | function lt(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;swit...
  function ut (line 1) | function ut(e,t){e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument;var...
  function ft (line 1) | function ft(){}
  function ht (line 1) | function ht(e,t){switch(e){case"button":case"input":case"select":case"te...
  function dt (line 1) | function dt(e,t){return"textarea"===e||"option"===e||"noscript"===e||"st...
  function pt (line 1) | function pt(e,t,n,r,o){e[Mo]=o,"input"===n&&"radio"===o.type&&null!=o.na...
  function mt (line 1) | function mt(e){for(e=e.nextSibling;e&&1!==e.nodeType&&3!==e.nodeType;)e=...
  function vt (line 1) | function vt(e){for(e=e.firstChild;e&&1!==e.nodeType&&3!==e.nodeType;)e=e...
  function gt (line 1) | function gt(e){0>Ma||(e.current=Oa[Ma],Oa[Ma]=null,Ma--)}
  function yt (line 1) | function yt(e,t){Ma++,Oa[Ma]=e.current,e.current=t}
  function bt (line 1) | function bt(e,t){var n=e.type.contextTypes;if(!n)return Aa;var r=e.state...
  function wt (line 1) | function wt(e){return null!==(e=e.childContextTypes)&&void 0!==e}
  function Ct (line 1) | function Ct(e){gt(Fa,e),gt(Pa,e)}
  function Et (line 1) | function Et(e){gt(Fa,e),gt(Pa,e)}
  function xt (line 1) | function xt(e,t,n){Pa.current!==Aa&&o("168"),yt(Pa,t,e),yt(Fa,n,e)}
  function St (line 1) | function St(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"...
  function kt (line 1) | function kt(e){var t=e.stateNode;return t=t&&t.__reactInternalMemoizedMe...
  function _t (line 1) | function _t(e,t,n){var r=e.stateNode;r||o("169"),n?(t=St(e,t,za),r.__rea...
  function Ot (line 1) | function Ot(e){return function(t){try{return e(t)}catch(e){}}}
  function Mt (line 1) | function Mt(e){if("undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)ret...
  function At (line 1) | function At(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this....
  function Pt (line 1) | function Pt(e,t,n,r){return new At(e,t,n,r)}
  function Ft (line 1) | function Ft(e){return!(!(e=e.prototype)||!e.isReactComponent)}
  function zt (line 1) | function zt(e){if("function"==typeof e)return Ft(e)?1:0;if(void 0!==e&&n...
  function Tt (line 1) | function Tt(e,t){var n=e.alternate;return null===n?(n=Pt(e.tag,t,e.key,e...
  function Lt (line 1) | function Lt(e,t,n,r,i,a){var s=2;if(r=e,"function"==typeof e)Ft(e)&&(s=1...
  function Dt (line 1) | function Dt(e,t,n,r){return e=Pt(7,e,r,t),e.expirationTime=n,e}
  function jt (line 1) | function jt(e,t,n,r){return e=Pt(8,e,r,t),t=0==(1&t)?ui:pi,e.elementType...
  function Rt (line 1) | function Rt(e,t,n){return e=Pt(6,e,null,t),e.expirationTime=n,e}
  function Nt (line 1) | function Nt(e,t,n){return t=Pt(4,null!==e.children?e.children:[],e.key,t...
  function It (line 1) | function It(e,t){e.didError=!1;var n=e.earliestPendingTime;0===n?e.earli...
  function Ht (line 1) | function Ht(e,t){if(e.didError=!1,0===t)e.earliestPendingTime=0,e.latest...
  function Vt (line 1) | function Vt(e,t){e.didError=!1,e.latestPingedTime>=t&&(e.latestPingedTim...
  function Bt (line 1) | function Bt(e,t){var n=e.earliestPendingTime;return e=e.earliestSuspende...
  function $t (line 1) | function $t(e,t){var n=t.earliestSuspendedTime,r=t.latestSuspendedTime,o...
  function Wt (line 1) | function Wt(e,t){if(e&&e.defaultProps){t=so({},t),e=e.defaultProps;for(v...
  function Ut (line 1) | function Ut(e){var t=e._result;switch(e._status){case 1:return t;case 2:...
  function Kt (line 1) | function Kt(e,t,n,r){t=e.memoizedState,n=n(r,t),n=null===n||void 0===n?t...
  function qt (line 1) | function qt(e,t,n,r,o,i,a){return e=e.stateNode,"function"==typeof e.sho...
  function Gt (line 1) | function Gt(e,t,n){var r=!1,o=Aa,i=t.contextType;return"object"==typeof ...
  function Yt (line 1) | function Yt(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceive...
  function Qt (line 1) | function Qt(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState...
  function Xt (line 1) | function Xt(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=...
  function Jt (line 1) | function Jt(e,t){"textarea"!==e.type&&o("31","[object Object]"===Object....
  function Zt (line 1) | function Zt(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.next...
  function en (line 1) | function en(e){return e===Ha&&o("174"),e}
  function tn (line 1) | function tn(e,t){yt($a,t,e),yt(Ba,e,e),yt(Va,Ha,e);var n=t.nodeType;swit...
  function nn (line 1) | function nn(e){gt(Va,e),gt(Ba,e),gt($a,e)}
  function rn (line 1) | function rn(e){en($a.current);var t=en(Va.current),n=ot(t,e.type);t!==n&...
  function on (line 1) | function on(e){Ba.current===e&&(gt(Va,e),gt(Ba,e))}
  function an (line 1) | function an(){o("321")}
  function sn (line 1) | function sn(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length...
  function cn (line 1) | function cn(e,t,n,r,i,a){if(Za=a,es=t,ns=null!==e?e.memoizedState:null,J...
  function ln (line 1) | function ln(){Ja.current=hs,Za=0,is=os=rs=ns=ts=es=null,as=0,ss=null,cs=...
  function un (line 1) | function un(){var e={memoizedState:null,baseState:null,queue:null,baseUp...
  function fn (line 1) | function fn(){if(null!==is)os=is,is=os.next,ts=ns,ns=null!==ts?ts.next:n...
  function hn (line 1) | function hn(e,t){return"function"==typeof t?t(e):t}
  function dn (line 1) | function dn(e){var t=fn(),n=t.queue;if(null===n&&o("311"),n.lastRendered...
  function pn (line 1) | function pn(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null...
  function mn (line 1) | function mn(e,t,n,r){var o=un();cs|=e,o.memoizedState=pn(t,n,void 0,void...
  function vn (line 1) | function vn(e,t,n,r){var o=fn();r=void 0===r?null:r;var i=void 0;if(null...
  function gn (line 1) | function gn(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(nul...
  function yn (line 1) | function yn(){}
  function bn (line 1) | function bn(e,t,n){25>fs||o("301");var r=e.alternate;if(e===es||null!==r...
  function wn (line 1) | function wn(e,t){var n=Pt(5,null,null,0);n.elementType="DELETED",n.type=...
  function Cn (line 1) | function Cn(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==...
  function En (line 1) | function En(e){if(gs){var t=vs;if(t){var n=t;if(!Cn(e,t)){if(!(t=mt(n))|...
  function xn (line 1) | function xn(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&18!==e.tag...
  function Sn (line 1) | function Sn(e){if(e!==ms)return!1;if(!gs)return xn(e),gs=!0,!1;var t=e.t...
  function kn (line 1) | function kn(){vs=ms=null,gs=!1}
  function _n (line 1) | function _n(e,t,n,r){t.child=null===e?Ia(t,null,n,r):Na(t,e.child,n,r)}
  function On (line 1) | function On(e,t,n,r,o){n=n.render;var i=t.ref;return Hn(t,o),r=cn(e,t,n,...
  function Mn (line 1) | function Mn(e,t,n,r,o,i){if(null===e){var a=n.type;return"function"!=typ...
  function An (line 1) | function An(e,t,n,r,o,i){return null!==e&&Me(e.memoizedProps,r)&&e.ref==...
  function Pn (line 1) | function Pn(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&...
  function Fn (line 1) | function Fn(e,t,n,r,o){var i=wt(n)?za:Pa.current;return i=bt(t,i),Hn(t,o...
  function zn (line 1) | function zn(e,t,n,r,o){if(wt(n)){var i=!0;kt(t)}else i=!1;if(Hn(t,o),nul...
  function Tn (line 1) | function Tn(e,t,n,r,o,i){Pn(e,t);var a=0!=(64&t.effectTag);if(!r&&!a)ret...
  function Ln (line 1) | function Ln(e){var t=e.stateNode;t.pendingContext?xt(e,t.pendingContext,...
  function Dn (line 1) | function Dn(e,t,n){var r=t.mode,o=t.pendingProps,i=t.memoizedState;if(0=...
  function jn (line 1) | function jn(e,t,n){if(null!==e&&(t.contextDependencies=e.contextDependen...
  function Rn (line 1) | function Rn(e,t,n){var r=t.expirationTime;if(null!==e){if(e.memoizedProp...
  function Nn (line 1) | function Nn(e,t){var n=e.type._context;yt(ws,n._currentValue,e),n._curre...
  function In (line 1) | function In(e){var t=ws.current;gt(ws,e),e.type._context._currentValue=t}
  function Hn (line 1) | function Hn(e,t){Cs=e,xs=Es=null;var n=e.contextDependencies;null!==n&&n...
  function Vn (line 1) | function Vn(e,t){return xs!==e&&!1!==t&&0!==t&&("number"==typeof t&&1073...
  function Bn (line 1) | function Bn(e){return{baseState:e,firstUpdate:null,lastUpdate:null,first...
  function $n (line 1) | function $n(e){return{baseState:e.baseState,firstUpdate:e.firstUpdate,la...
  function Wn (line 1) | function Wn(e){return{expirationTime:e,tag:Ss,payload:null,callback:null...
  function Un (line 1) | function Un(e,t){null===e.lastUpdate?e.firstUpdate=e.lastUpdate=t:(e.las...
  function Kn (line 1) | function Kn(e,t){var n=e.alternate;if(null===n){var r=e.updateQueue,o=nu...
  function qn (line 1) | function qn(e,t){var n=e.updateQueue;n=null===n?e.updateQueue=Bn(e.memoi...
  function Gn (line 1) | function Gn(e,t){var n=e.alternate;return null!==n&&t===n.updateQueue&&(...
  function Yn (line 1) | function Yn(e,t,n,r,o,i){switch(n.tag){case ks:return e=n.payload,"funct...
  function Qn (line 1) | function Qn(e,t,n,r,o){Ms=!1,t=Gn(e,t);for(var i=t.baseState,a=null,s=0,...
  function Xn (line 1) | function Xn(e,t,n){null!==t.firstCapturedUpdate&&(null!==t.lastUpdate&&(...
  function Jn (line 1) | function Jn(e,t){for(;null!==e;){var n=e.callback;if(null!==n){e.callbac...
  function Zn (line 1) | function Zn(e,t){return{value:e,source:t,stack:te(t)}}
  function er (line 1) | function er(e){e.effectTag|=4}
  function tr (line 1) | function tr(e,t){var n=t.source,r=t.stack;null===r&&null!==n&&(r=te(n)),...
  function nr (line 1) | function nr(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(nul...
  function rr (line 1) | function rr(e,t,n){if(n=n.updateQueue,null!==(n=null!==n?n.lastEffect:nu...
  function or (line 1) | function or(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)r.s...
  function ir (line 1) | function ir(e){switch("function"==typeof La&&La(e),e.tag){case 0:case 11...
  function ar (line 1) | function ar(e){return 5===e.tag||3===e.tag||4===e.tag}
  function sr (line 1) | function sr(e){e:{for(var t=e.return;null!==t;){if(ar(t)){var n=t;break ...
  function cr (line 1) | function cr(e){for(var t=e,n=!1,r=void 0,i=void 0;;){if(!n){n=t.return;e...
  function lr (line 1) | function lr(e,t){switch(t.tag){case 0:case 11:case 14:case 15:rr(Ka,qa,t...
  function ur (line 1) | function ur(e,t,n){n=Wn(n),n.tag=Os,n.payload={element:null};var r=t.val...
  function fr (line 1) | function fr(e,t,n){n=Wn(n),n.tag=Os;var r=e.type.getDerivedStateFromErro...
  function hr (line 1) | function hr(e){switch(e.tag){case 1:wt(e.type)&&Ct(e);var t=e.effectTag;...
  function dr (line 1) | function dr(){if(null!==Is)for(var e=Is.return;null!==e;){var t=e;switch...
  function pr (line 1) | function pr(){for(;null!==Ws;){var e=Ws.effectTag;if(16&e&&it(Ws.stateNo...
  function mr (line 1) | function mr(){for(;null!==Ws;){if(256&Ws.effectTag)e:{var e=Ws.alternate...
  function vr (line 1) | function vr(e,t){for(;null!==Ws;){var n=Ws.effectTag;if(36&n){var r=Ws.a...
  function gr (line 1) | function gr(e,t){Gs=qs=Ks=null;var n=ec;ec=!0;do{if(512&t.effectTag){var...
  function yr (line 1) | function yr(){null!==qs&&_a(qs),null!==Gs&&Gs()}
  function br (line 1) | function br(e,t){Us=Ns=!0,e.current===t&&o("177");var n=e.pendingCommitE...
  function wr (line 1) | function wr(e){for(;;){var t=e.alternate,n=e.return,r=e.sibling;if(0==(1...
  function Cr (line 1) | function Cr(e){var t=Rn(e.alternate,e,Vs);return e.memoizedProps=e.pendi...
  function Er (line 1) | function Er(e,t){Ns&&o("243"),yr(),Ns=!0;var n=Ds.current;Ds.current=hs;...
  function xr (line 1) | function xr(e,t){for(var n=e.return;null!==n;){switch(n.tag){case 1:var ...
  function Sr (line 1) | function Sr(e,t){var n=co.unstable_getCurrentPriorityLevel(),r=void 0;if...
  function kr (line 1) | function kr(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),null!==Hs&&Vs...
  function _r (line 1) | function _r(e,t){var n=e.stateNode;null!==n&&n.delete(t),t=Dr(),t=Sr(t,e...
  function Or (line 1) | function Or(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.altern...
  function Mr (line 1) | function Mr(e,t){null!==(e=Or(e,t))&&(!Ns&&0!==Vs&&t>Vs&&dr(),It(e,t),Ns...
  function Ar (line 1) | function Ar(e,t,n,r,o){return co.unstable_runWithPriority(co.unstable_Im...
  function Pr (line 1) | function Pr(){uc=1073741822-((co.unstable_now()-lc)/10|0)}
  function Fr (line 1) | function Fr(e,t){if(0!==Js){if(t<Js)return;null!==Zs&&co.unstable_cancel...
  function zr (line 1) | function zr(e,t,n,r,o){e.expirationTime=r,0!==o||Nr()?0<o&&(e.timeoutHan...
  function Tr (line 1) | function Tr(e,t,n){e.pendingCommitExpirationTime=n,e.finishedWork=t,Pr()...
  function Lr (line 1) | function Lr(e,t){e.expirationTime=t,e.finishedWork=null}
  function Dr (line 1) | function Dr(){return ec?fc:(Rr(),0!==nc&&1!==nc||(Pr(),fc=uc),fc)}
  function jr (line 1) | function jr(e,t){null===e.nextScheduledRoot?(e.expirationTime=t,null===X...
  function Rr (line 1) | function Rr(){var e=0,t=null;if(null!==Xs)for(var n=Xs,r=Qs;null!==r;){v...
  function Nr (line 1) | function Nr(){return!!mc||!!co.unstable_shouldYield()&&(mc=!0)}
  function Ir (line 1) | function Ir(){try{if(!Nr()&&null!==Qs){Pr();var e=Qs;do{var t=e.expirati...
  function Hr (line 1) | function Hr(e,t){if(Rr(),t)for(Pr(),fc=uc;null!==tc&&0!==nc&&e<=nc&&!(mc...
  function Vr (line 1) | function Vr(e,t){ec&&o("253"),tc=e,nc=t,Br(e,t,!1),Hr(1073741823,!1)}
  function Br (line 1) | function Br(e,t,n){if(ec&&o("245"),ec=!0,n){var r=e.finishedWork;null!==...
  function $r (line 1) | function $r(e,t,n){var r=e.firstBatch;if(null!==r&&r._expirationTime>=n&...
  function Wr (line 1) | function Wr(e){null===tc&&o("246"),tc.expirationTime=0,oc||(oc=!0,ic=e)}
  function Ur (line 1) | function Ur(e,t){var n=ac;ac=!0;try{return e(t)}finally{(ac=n)||ec||Hr(1...
  function Kr (line 1) | function Kr(e,t){if(ac&&!sc){sc=!0;try{return e(t)}finally{sc=!1}}return...
  function qr (line 1) | function qr(e,t,n){ac||ec||0===rc||(Hr(rc,!1),rc=0);var r=ac;ac=!0;try{r...
  function Gr (line 1) | function Gr(e,t,n,r,i){var a=t.current;e:if(n){n=n._reactInternalFiber;t...
  function Yr (line 1) | function Yr(e,t,n,r){var o=t.current;return o=Sr(Dr(),o),Gr(e,t,n,o,r)}
  function Qr (line 1) | function Qr(e){if(e=e.current,!e.child)return null;switch(e.child.tag){c...
  function Xr (line 1) | function Xr(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?argum...
  function Jr (line 1) | function Jr(e){var t=1073741822-25*(1+((1073741822-Dr()+500)/25|0));t>=R...
  function Zr (line 1) | function Zr(){this._callbacks=null,this._didCommit=!1,this._onCommit=thi...
  function eo (line 1) | function eo(e,t,n){t=Pt(3,null,null,t?3:0),e={current:t,containerInfo:e,...
  function to (line 1) | function to(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeTy...
  function no (line 1) | function no(e,t){if(t||(t=e?9===e.nodeType?e.documentElement:e.firstChil...
  function ro (line 1) | function ro(e,t,n,r,o){var i=n._reactRootContainer;if(i){if("function"==...
  function oo (line 1) | function oo(e,t){var n=2<arguments.length&&void 0!==arguments[2]?argumen...
  function io (line 1) | function io(e,t){return to(e)||o("299","unstable_createRoot"),new eo(e,!...
  function t (line 1) | function t(){}
  function n (line 1) | function n(){return r.apply(this,arguments)}
  function r (line 1) | function r(e){if(a)return void e(a);u.a.newInstance({prefixCls:p,transit...
  function o (line 1) | function o(e){var t=void 0!==e.duration?e.duration:h,n={info:"info-circl...
  function n (line 1) | function n(e,t,n,r){var i=t&&t.prototype instanceof o?t:o,a=Object.creat...
  function r (line 1) | function r(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){ret...
  function o (line 1) | function o(){}
  function i (line 1) | function i(){}
  function a (line 1) | function a(){}
  function s (line 1) | function s(e){["next","throw","return"].forEach(function(t){e[t]=functio...
  function c (line 1) | function c(e){function t(n,o,i,a){var s=r(e[n],e,o);if("throw"!==s.type)...
  function l (line 1) | function l(e,t,n){var o=k;return function(i,a){if(o===O)throw new Error(...
  function u (line 1) | function u(e,t){var n=e.iterator[t.method];if(n===v){if(t.delegate=null,...
  function f (line 1) | function f(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.f...
  function h (line 1) | function h(e){var t=e.completion||{};t.type="normal",delete t.arg,e.comp...
  function d (line 1) | function d(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(f,this),this.r...
  function p (line 1) | function p(e){if(e){var t=e[w];if(t)return t.call(e);if("function"==type...
  function m (line 1) | function m(){return{value:v,done:!0}}
  function t (line 1) | function t(t,r){return i.type="throw",i.arg=e,n.next=t,r&&(n.method="nex...
  function r (line 1) | function r(e,t,n,a,s,c,l,u,f,h){if(a&&"object"==typeof a&&!Array.isArray...
  function o (line 1) | function o(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}
  function r (line 1) | function r(e){return o(function(t,n){var r=-1,o=n.length,a=o>1?n[o-1]:vo...
  function r (line 1) | function r(e,t){var n="".concat(t.namespace).concat(o.NAMESPACE_SEP).con...
  function t (line 1) | function t(){var e,n;(0,s.default)(this,t);for(var r=arguments.length,o=...
  function r (line 1) | function r(e,t){this._id=e,this._clearFn=t}
  function r (line 1) | function r(e,t,n){return t in e?o(e,t,{value:n,enumerable:!0,configurabl...
  function r (line 1) | function r(e,t){return e.replace(";base64",";name=".concat(t,";base64"))}
  function o (line 1) | function o(e){var t=e.name,n=e.size,o=e.type;return new Promise(function...
  function i (line 1) | function i(e){return Promise.all([].map.call(e,o))}
  function t (line 1) | function t(){return(0,f.default)(this,t),(0,d.default)(this,(0,p.default...
  function t (line 1) | function t(e){var n;(0,f.default)(this,t),n=(0,d.default)(this,(0,p.defa...
  function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
  function o (line 1) | function o(){return o=Object.assign||function(e){for(var t=1;t<arguments...
  function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
  function o (line 1) | function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function i (line 1) | function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
  function a (line 1) | function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function s (line 1) | function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function c (line 1) | function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function l (line 1) | function l(e,t,n){return t&&c(e.prototype,t),n&&c(e,n),e}
  function u (line 1) | function u(e,t){return!t||"object"!==o(t)&&"function"!=typeof t?h(e):t}
  function f (line 1) | function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function h (line 1) | function h(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function d (line 1) | function d(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function p (line 1) | function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e._...
  function t (line 1) | function t(e){var n;return s(this,t),n=u(this,f(t).call(this,e)),y.edito...
  function r (line 1) | function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function o (line 1) | function o(e,t){if(!e)throw new ReferenceError("this hasn't been initial...
  function i (line 1) | function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function t (line 1) | function t(){return r(this,t),o(this,e.apply(this,arguments))}
  function n (line 1) | function n(e){return function(){return e}}
  function r (line 1) | function r(e){function t(){o-=1,o<=0?(e(),delete s[r]):s[r]=i()(t)}var n...
  function n (line 1) | function n(e,t){return e===t||e!==e&&t!==t}
  function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
  function o (line 1) | function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function i (line 1) | function i(e,t){if(!e)throw new ReferenceError("this hasn't been initial...
  function a (line 1) | function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function s (line 1) | function s(e,t){return e===t?0!==e||1/e==1/t:e!==e&&t!==t}
  function c (line 1) | function c(e){var t=[];return{on:function(e){t.push(e)},off:function(e){...
  function l (line 1) | function l(e){return Array.isArray(e)?e[0]:e}
  function u (line 1) | function u(e,t){var n,r,u="__create-react-context-"+(0,m.default)()+"__"...
  function n (line 1) | function n(){throw new TypeError("Invalid attempt to spread non-iterable...
  function r (line 1) | function r(e){return o(this.__data__,e)>-1}
  function r (line 1) | function r(e,t,n){function o(){g===v&&(g=v.slice())}function i(){return ...
  function o (line 1) | function o(e,t){var n=t&&t.type;return"Given action "+(n&&'"'+n.toString...
  function i (line 1) | function i(e){Object.keys(e).forEach(function(t){var n=e[t];if(void 0===...
  function a (line 1) | function a(e){for(var t=Object.keys(e),n={},r=0;r<t.length;r++){var a=t[...
  function s (line 1) | function s(e,t){return function(){return t(e.apply(void 0,arguments))}}
  function c (line 1) | function c(e,t){if("function"==typeof e)return s(e,t);if("object"!=typeo...
  function l (line 1) | function l(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=argu...
  function u (line 1) | function u(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=argu...
  function r (line 1) | function r(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this...
  function r (line 1) | function r(e){return e="full"==e?"full":"fast",f.copy(r[e])}
  function o (line 1) | function o(e){return e%4==0&&(e%100!=0||e%400==0)}
  function i (line 1) | function i(e){var t=e.match(h);if(!t)return!1;var n=+t[1],r=+t[2],i=+t[3...
  function a (line 1) | function a(e,t){var n=e.match(p);if(!n)return!1;var r=n[1],o=n[2],i=n[3]...
  function s (line 1) | function s(e){var t=e.split(S);return 2==t.length&&i(t[0])&&a(t[1],!0)}
  function c (line 1) | function c(e){return e.length<=255&&m.test(e)}
  function l (line 1) | function l(e){return k.test(e)&&v.test(e)}
  function u (line 1) | function u(e){if(_.test(e))return!1;try{return new RegExp(e),!0}catch(e)...
  function r (line 1) | function r(e,t){for(var n=-1,r=null==e?0:e.length,o=0,i=[];++n<r;){var a...
  function o (line 1) | function o(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];re...
  function i (line 1) | function i(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))...
  function a (line 1) | function a(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}
  function s (line 1) | function s(e,t){return e.has(t)}
  function c (line 1) | function c(e,t){return null==e?void 0:e[t]}
  function l (line 1) | function l(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[...
  function u (line 1) | function u(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++...
  function f (line 1) | function f(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var...
  function h (line 1) | function h(){this.__data__=St?St(null):{},this.size=0}
  function d (line 1) | function d(e){var t=this.has(e)&&delete this.__data__[e];return this.siz...
  function p (line 1) | function p(e){var t=this.__data__;if(St){var n=t[e];return n===ye?void 0...
  function m (line 1) | function m(e){var t=this.__data__;return St?void 0!==t[e]:at.call(t,e)}
  function v (line 1) | function v(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[...
  function g (line 1) | function g(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var...
  function y (line 1) | function y(){this.__data__=[],this.size=0}
  function b (line 1) | function b(e){var t=this.__data__,n=I(t,e);return!(n<0)&&(n==t.length-1?...
  function w (line 1) | function w(e){var t=this.__data__,n=I(t,e);return n<0?void 0:t[n][1]}
  function C (line 1) | function C(e){return I(this.__data__,e)>-1}
  function E (line 1) | function E(e,t){var n=this.__data__,r=I(n,e);return r<0?(++this.size,n.p...
  function x (line 1) | function x(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var...
  function S (line 1) | function S(){this.size=0,this.__data__={hash:new f,map:new(wt||g),string...
  function k (line 1) | function k(e){var t=J(this,e).delete(e);return this.size-=t?1:0,t}
  function _ (line 1) | function _(e){return J(this,e).get(e)}
  function O (line 1) | function O(e){return J(this,e).has(e)}
  function M (line 1) | function M(e,t){var n=J(this,e),r=n.size;return n.set(e,t),this.size+=n....
  function A (line 1) | function A(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new x;++t<...
  function P (line 1) | function P(e){return this.__data__.set(e,ye),this}
  function F (line 1) | function F(e){return this.__data__.has(e)}
  function z (line 1) | function z(e){var t=this.__data__=new g(e);this.size=t.size}
  function T (line 1) | function T(){this.__data__=new g,this.size=0}
  function L (line 1) | function L(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}
  function D (line 1) | function D(e){return this.__data__.get(e)}
  function j (line 1) | function j(e){return this.__data__.has(e)}
  function R (line 1) | function R(e,t){var n=this.__data__;if(n instanceof g){var r=n.__data__;...
  function N (line 1) | function N(e,t){var n=Dt(e),r=!n&&Lt(e),o=!n&&!r&&jt(e),i=!n&&!r&&!o&&Rt...
  function I (line 1) | function I(e,t){for(var n=e.length;n--;)if(se(e[n][0],t))return n;return-1}
  function H (line 1) | function H(e,t,n){var r=t(e);return Dt(e)?r:o(r,n(e))}
  function V (line 1) | function V(e){return null==e?void 0===e?Ie:ze:mt&&mt in Object(e)?ee(e):...
  function B (line 1) | function B(e){return de(e)&&V(e)==Ee}
  function $ (line 1) | function $(e,t,n,r,o){return e===t||(null==e||null==t||!de(e)&&!de(t)?e!...
  function W (line 1) | function W(e,t,n,r,o,i){var a=Dt(e),s=Dt(t),c=a?xe:Tt(e),l=s?xe:Tt(t);c=...
  function U (line 1) | function U(e){return!(!he(e)||re(e))&&(ue(e)?lt:$e).test(ae(e))}
  function K (line 1) | function K(e){return de(e)&&fe(e.length)&&!!Ue[V(e)]}
  function q (line 1) | function q(e){if(!oe(e))return yt(e);var t=[];for(var n in Object(e))at....
  function G (line 1) | function G(e,t,n,r,o,a){var c=n&be,l=e.length,u=t.length;if(l!=u&&!(c&&u...
  function Y (line 1) | function Y(e,t,n,r,o,i,a){switch(n){case Ve:if(e.byteLength!=t.byteLengt...
  function Q (line 1) | function Q(e,t,n,r,o,i){var a=n&be,s=X(e),c=s.length;if(c!=X(t).length&&...
  function X (line 1) | function X(e){return H(e,pe,zt)}
  function J (line 1) | function J(e,t){var n=e.__data__;return ne(t)?n["string"==typeof t?"stri...
  function Z (line 1) | function Z(e,t){var n=c(e,t);return U(n)?n:void 0}
  function ee (line 1) | function ee(e){var t=at.call(e,mt),n=e[mt];try{e[mt]=void 0;var r=!0}cat...
  function te (line 1) | function te(e,t){return!!(t=null==t?Ce:t)&&("number"==typeof e||We.test(...
  function ne (line 1) | function ne(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==...
  function re (line 1) | function re(e){return!!st&&st in e}
  function oe (line 1) | function oe(e){var t=e&&e.constructor;return e===("function"==typeof t&&...
  function ie (line 1) | function ie(e){return ct.call(e)}
  function ae (line 1) | function ae(e){if(null!=e){try{return it.call(e)}catch(e){}try{return e+...
  function se (line 1) | function se(e,t){return e===t||e!==e&&t!==t}
  function ce (line 1) | function ce(e){return null!=e&&fe(e.length)&&!ue(e)}
  function le (line 1) | function le(e,t){return $(e,t)}
  function ue (line 1) | function ue(e){if(!he(e))return!1;var t=V(e);return t==Me||t==Ae||t==Se|...
  function fe (line 1) | function fe(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=Ce}
  function he (line 1) | function he(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}
  function de (line 1) | function de(e){return null!=e&&"object"==typeof e}
  function pe (line 1) | function pe(e){return ce(e)?N(e):q(e)}
  function me (line 1) | function me(){return[]}
  function ve (line 1) | function ve(){return!1}
  function e (line 1) | function e(){this._weakMap=new WeakMap}
  function t (line 1) | function t(){var e,n;(0,f.default)(this,t);for(var r=arguments.length,o=...
  function r (line 1) | function r(){function e(e){return n.push(e),function(){return(0,c.remove...
  function o (line 1) | function o(){function e(){if(a&&s.length)throw(0,c.internalErr)("Cannot ...
  function i (line 1) | function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
  function a (line 1) | function a(e){var t=i(function(t){return e(function(e){if(e[c.SAGA_ACTIO...
  function r (line 1) | function r(e){var t=e.id,n=e.description;return n?"string"==typeof n?i.d...
  function r (line 1) | function r(e){return!e||e<0?0:e>100?100:e}
  function o (line 1) | function o(){return o=Object.assign||function(e){for(var t=1;t<arguments...
  function i (line 1) | function i(e,t){return c(e)||s(e,t)||a()}
  function a (line 1) | function a(){throw new TypeError("Invalid attempt to destructure non-ite...
  function s (line 1) | function s(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.ite...
  function c (line 1) | function c(e){if(Array.isArray(e))return e}
  function l (line 1) | function l(e){var t=e.percent,n=e.successPercent,o=r(t);return n?[n,r(o-...
  function u (line 1) | function u(e){var t=e.progressStatus,n=e.successPercent,r=e.strokeColor,...
  function f (line 1) | function f(e){return(f="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function h (line 1) | function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function d (line 1) | function d(){return d=Object.assign||function(e){for(var t=1;t<arguments...
  function p (line 1) | function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function m (line 1) | function m(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function v (line 1) | function v(e,t,n){return t&&m(e.prototype,t),n&&m(e,n),e}
  function g (line 1) | function g(e,t){return!t||"object"!==f(t)&&"function"!=typeof t?y(e):t}
  function y (line 1) | function y(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function b (line 1) | function b(e){return(b=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function w (line 1) | function w(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function C (line 1) | function C(e,t){return(C=Object.setPrototypeOf||function(e,t){return e._...
  function t (line 1) | function t(){return V()(this,t),$()(this,e.apply(this,arguments))}
  function t (line 1) | function t(){var n,r,o;V()(this,t);for(var i=arguments.length,a=Array(i)...
  function t (line 1) | function t(){var n,r,o;V()(this,t);for(var i=arguments.length,a=Array(i)...
  function t (line 1) | function t(){var e;return p(this,t),e=g(this,b(t).apply(this,arguments))...
  function r (line 1) | function r(e){var t=o(e,"string");return"symbol"==typeof t?t:String(t)}
  function o (line 1) | function o(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol....
  function i (line 1) | function i(){return{fields:n("hchJ").default,widgets:n("K1Py").default,d...
  function a (line 1) | function a(e){var t=e.type;return!t&&e.const?oe(e.const):!t&&e.enum?"str...
  function s (line 1) | function s(e,t){var n=arguments.length>2&&void 0!==arguments[2]?argument...
  function c (line 1) | function c(e,t){var n=arguments.length>2&&void 0!==arguments[2]?argument...
  function l (line 1) | function l(e,t){var n=arguments.length>2&&void 0!==arguments[2]?argument...
  function u (line 1) | function u(e){return Object.keys(e).filter(function(e){return 0===e.inde...
  function f (line 1) | function f(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}
  function h (line 1) | function h(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&argumen...
  function d (line 1) | function d(e){if(""!==e){if(/\.$/.test(e))return e;if(/\.0$/.test(e))ret...
  function p (line 1) | function p(e,t){if(!Array.isArray(t))return e;var n=function(e){return e...
  function m (line 1) | function m(e){return Array.isArray(e.enum)&&1===e.enum.length||e.hasOwnP...
  function v (line 1) | function v(e){if(Array.isArray(e.enum)&&1===e.enum.length)return e.enum[...
  function g (line 1) | function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
  function y (line 1) | function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
  function b (line 1) | function b(e,t){var n=arguments.length>2&&void 0!==arguments[2]?argument...
  function w (line 1) | function w(e){return Array.isArray(e.items)&&e.items.length>0&&e.items.e...
  function C (line 1) | function C(e){return!0===e.additionalItems&&console.warn("additionalItem...
  function E (line 1) | function E(e){return e.enum?e.enum.map(function(t,n){return{label:e.enum...
  function x (line 1) | function x(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
  function S (line 1) | function S(e){var t=(arguments.length>1&&void 0!==arguments[1]&&argument...
  function k (line 1) | function k(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
  function _ (line 1) | function _(e,t,n){var r=x(e.$ref,t),o=(e.$ref,(0,Q.default)(e,["$ref"]))...
  function O (line 1) | function O(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
  function M (line 1) | function M(e,t,n){var r=e.dependencies,o=void 0===r?{}:r,i=(0,Q.default)...
  function A (line 1) | function A(e,t){if(!t)return e;var n=Array.isArray(e.required)?Array.fro...
  function P (line 1) | function P(e,t,n,r,o){var i=O(o,t,n),a=i.oneOf;if(e=z(e,(0,Q.default)(i,...
  function F (line 1) | function F(e,t,n,o,i){var a=i.filter(function(e){if(!e.properties)return...
  function z (line 1) | function z(e,t){return h(e,t,!0)}
  function T (line 1) | function T(e){return"[object Arguments]"===Object.prototype.toString.cal...
  function L (line 1) | function L(e,t){var n=arguments.length>2&&void 0!==arguments[2]?argument...
  function D (line 1) | function D(e,t,n){var r=e.props,o=e.state;return!L(r,t)||!L(o,n)}
  function j (line 1) | function j(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?argume...
  function R (line 1) | function R(e){var t=!(arguments.length>1&&void 0!==arguments[1])||argume...
  function N (line 1) | function N(e){var t=e.year,n=e.month,r=e.day,o=e.hour,i=void 0===o?0:o,a...
  function I (line 1) | function I(e,t){for(var n=String(e);n.length<t;)n="0"+n;return n}
  function H (line 1) | function H(t,n,r){t.props.safeRenderCompletion?t.setState(n,r):(t.setSta...
  function V (line 1) | function V(e){var t,n=e.split(","),r=n[0].split(";"),o=r[0].replace("dat...
  function B (line 1) | function B(e){var t={};return e.multipleOf&&(t.step=e.multipleOf),(e.min...
  function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
  function r (line 1) | function r(e){return!0===o(e)&&"[object Object]"===Object.prototype.toSt...
  function r (line 1) | function r(e,t,n){return null==e?e:o(e,t,n)}
  function r (line 1) | function r(e){var t=a(e),n=s[t];if("function"!=typeof n||!(t in o.protot...
  function r (line 1) | function r(e){var t=o(e),n=t%1;return t===t?n?t-n:t:0}
  function n (line 1) | function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function r (line 1) | function r(t){return"function"==typeof Symbol&&"symbol"===n(Symbol.itera...
  function r (line 1) | function r(e){var t=void 0,n=void 0,r=void 0,o=e.ownerDocument,i=o.body,...
  function o (line 1) | function o(e,t){var n=e["page"+(t?"Y":"X")+"Offset"],r="scroll"+(t?"Top"...
  function i (line 1) | function i(e){return o(e)}
  function a (line 1) | function a(e){return o(e,!0)}
  function s (line 1) | function s(e){var t=r(e),n=e.ownerDocument,o=n.defaultView||n.parentWind...
  function c (line 1) | function c(e,t,n){var r="",o=e.ownerDocument,i=n||o.defaultView.getCompu...
  function l (line 1) | function l(e,t){var n=e[S]&&e[S][t];if(E.test(n)&&!x.test(t)){var r=e.st...
  function u (line 1) | function u(e,t){for(var n=0;n<e.length;n++)t(e[n])}
  function f (line 1) | function f(e){return"border-box"===M(e,"boxSizing")}
  function h (line 1) | function h(e,t,n){var r={},o=e.style,i=void 0;for(i in t)t.hasOwnPropert...
  function d (line 1) | function d(e,t,n){var r=0,o=void 0,i=void 0,a=void 0;for(i=0;i<t.length;...
  function p (line 1) | function p(e){return null!=e&&e==e.window}
  function m (line 1) | function m(e,t,n){if(p(e))return"width"===t?T.viewportWidth(e):T.viewpor...
  function v (line 1) | function v(e){var t=void 0,n=arguments;return 0!==e.offsetWidth?t=m.appl...
  function g (line 1) | function g(e,t,n){var r=n;{if("object"!==(void 0===t?"undefined":w(t)))r...
  function y (line 1) | function y(e,t){"static"===g(e,"position")&&(e.style.position="relative"...
  function r (line 1) | function r(e){if(i(Object(e))||"[object Arguments]"===Object.prototype.t...
  function n (line 1) | function n(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e...
  function t (line 1) | function t(e){var t=o(e);return t&&void 0!==t.id?t.id:null}
  function n (line 1) | function n(e){var t=o(e);if(!t)throw new Error("setId required the eleme...
  function n (line 1) | function n(e,t,n,r,o){var i={};return Object.keys(r).forEach(function(e)...
  function r (line 1) | function r(e){return"symbol"==typeof e||i(e)&&o(e)==a}
  function r (line 1) | function r(e){if(e instanceof o)return e.clone();var t=new i(e.__wrapped...
  function r (line 1) | function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}
  function n (line 1) | function n(e,r){return e.reduce(function(e,o){return Array.isArray(o)&&r...
  function r (line 1) | function r(e){return null!=e&&i(g(e))}
  function o (line 1) | function o(e,t){return e="number"==typeof e||h.test(e)?+e:-1,t=null==t?v...
  function i (line 1) | function i(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=v}
  function a (line 1) | function a(e){for(var t=c(e),n=t.length,r=n&&e.length,a=!!r&&i(r)&&(f(e)...
  function s (line 1) | function s(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}
  function c (line 1) | function c(e){if(null==e)return[];s(e)||(e=Object(e));var t=e.length;t=t...
  function r (line 1) | function r(){}
  function o (line 1) | function o(e,t,n){var r=t||"";return e.key||r+"item_"+n}
  function i (line 1) | function i(e){return e+"-menu-"}
  function a (line 1) | function a(e,t){var n=-1;S.a.Children.forEach(e,function(e){n++,e&&e.typ...
  function s (line 1) | function s(e,t,n){e&&!n.find&&S.a.Children.forEach(e,function(e){if(e){v...
  function c (line 1) | function c(e){return!e.length||e.every(function(e){return!!e.props.disab...
  function l (line 1) | function l(e,t,n){var r,o=e.getState();e.setState({activeKey:p()({},o.ac...
  function u (line 1) | function u(e){return e.eventKey||"0-menu-"}
  function f (line 1) | function f(e,t){var n=t,r=e.children,i=e.eventKey;if(n){var s=void 0;if(...
  function h (line 1) | function h(e){if(e){var t=this.instanceArray.indexOf(e);-1!==t?this.inst...
  function t (line 1) | function t(n){y()(this,t);var r=w()(this,e.call(this,n));Y.call(r);var o...
  function t (line 1) | function t(){var n,r,o;y()(this,t);for(var i=arguments.length,a=Array(i)...
  function t (line 1) | function t(n){var r;y()(this,t);var o=w()(this,e.call(this,n));return oe...
  function t (line 1) | function t(n){y()(this,t);var r=w()(this,e.call(this,n));ce.call(r),r.is...
  function t (line 1) | function t(n){y()(this,t);var r=w()(this,e.call(this,n));return r.onKeyD...
  function t (line 1) | function t(){var n,r,o;y()(this,t);for(var i=arguments.length,a=Array(i)...
  function t (line 1) | function t(){return y()(this,t),w()(this,e.apply(this,arguments))}
  function e (line 1) | function e(e,t){var n=this;this.result={},this.rol=new r.default(functio...
  function r (line 1) | function r(e){if(!(this instanceof r))return new r(e);e=this._opts=N.cop...
  function o (line 1) | function o(e,t){var n;if("string"==typeof e){if(!(n=this.getSchema(e)))t...
  function i (line 1) | function i(e,t){var n=this._addSchema(e,void 0,t);return n.validate||thi...
  function a (line 1) | function a(e,t,n,r){if(Array.isArray(e)){for(var o=0;o<e.length;o++)this...
  function s (line 1) | function s(e,t,n){return this.addSchema(e,t,n,!0),this}
  function c (line 1) | function c(e,t){var n=e.$schema;if(void 0!==n&&"string"!=typeof n)throw ...
  function l (line 1) | function l(e){var t=e._opts.meta;return e._opts.defaultMeta="object"==ty...
  function u (line 1) | function u(e){var t=h(this,e);switch(typeof t){case"object":return t.val...
  function f (line 1) | function f(e,t){var n=F.schema.call(e,{schema:{}},t);if(n){var r=n.schem...
  function h (line 1) | function h(e,t){return t=F.normalizeId(t),e._schemas[t]||e._refs[t]||e._...
  function d (line 1) | function d(e){if(e instanceof RegExp)return p(this,this._schemas,e),p(th...
  function p (line 1) | function p(e,t,n){for(var r in t){var o=t[r];o.meta||n&&!n.test(r)||(e._...
  function m (line 1) | function m(e,t,n,r){if("object"!=typeof e&&"boolean"!=typeof e)throw new...
  function v (line 1) | function v(e,t){function n(){var t=e.validate,r=t.apply(this,arguments);...
  function g (line 1) | function g(e){switch(e.schemaId){case"auto":return w;case"id":return y;d...
  function y (line 1) | function y(e){return e.$id&&this.logger.warn("schema $id ignored",e.$id)...
  function b (line 1) | function b(e){return e.id&&this.logger.warn("schema id ignored",e.id),e....
  function w (line 1) | function w(e){if(e.$id&&e.id&&e.$id!=e.id)throw new Error("schema $id is...
  function C (line 1) | function C(e,t){if(!(e=e||this.errors))return"No errors";t=t||{};for(var...
  function E (line 1) | function E(e,t){return"string"==typeof t&&(t=new RegExp(t)),this._format...
  function x (line 1) | function x(e){var t;if(e._opts.$data&&(t=n("oCJ5"),e.addMetaSchema(t,t.$...
  function S (line 1) | function S(e){var t=e._opts.schemas;if(t)if(Array.isArray(t))e.addSchema...
  function k (line 1) | function k(e){for(var t in e._opts.formats){var n=e._opts.formats[t];e.a...
  function _ (line 1) | function _(e,t){if(e._schemas[t]||e._refs[t])throw new Error('schema wit...
  function O (line 1) | function O(e){for(var t=N.copy(e._opts),n=0;n<B.length;n++)delete t[B[n]...
  function M (line 1) | function M(e){var t=e._opts.logger;if(!1===t)e.logger={log:A,warn:A,erro...
  function A (line 1) | function A(){}
  function r (line 1) | function r(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!...
  function r (line 1) | function r(e){if(c(e)&&!s(e)&&!(e instanceof o)){if(e instanceof i)retur...
  function r (line 1) | function r(e){return isFinite(e=+e)&&0!=e?e<0?-r(-e):Math.log(e+Math.sqr...
  function r (line 1) | function r(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new o;++t<...
  function r (line 1) | function r(e,t){if(null==e)return{};var n,r,i=o(e,t);if(Object.getOwnPro...
  function r (line 1) | function r(e,t){var n=e.type,r=e.items;if(""!==t){if("array"===n&&r&&l.h...
  function o (line 1) | function o(e,t){return t?[].slice.call(e.target.options).filter(function...
  function i (line 1) | function i(e){var t=e.schema,n=e.id,i=e.options,a=e.value,c=e.required,l...
  function i (line 1) | function i(e){var t=this;this.next=null,this.entry=null,this.finish=func...
  function a (line 1) | function a(e){return L.from(e)}
  function s (line 1) | function s(e){return L.isBuffer(e)||e instanceof D}
  function c (line 1) | function c(){}
  function l (line 1) | function l(e,t){A=A||n("DsFX"),e=e||{};var r=t instanceof A;this.objectM...
  function u (line 1) | function u(e){if(A=A||n("DsFX"),!(R.call(u,this)||this instanceof A))ret...
  function f (line 1) | function f(e,t){var n=new Error("write after end");e.emit("error",n),M.n...
  function h (line 1) | function h(e,t,n,r){var o=!0,i=!1;return null===n?i=new TypeError("May n...
  function d (line 1) | function d(e,t,n){return e.objectMode||!1===e.decodeStrings||"string"!=t...
  function p (line 1) | function p(e,t,n,r,o,i){if(!n){var a=d(t,r,o);r!==a&&(n=!0,o="buffer",r=...
  function m (line 1) | function m(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!...
  function v (line 1) | function v(e,t,n,r,o){--t.pendingcb,n?(M.nextTick(o,r),M.nextTick(k,e,t)...
  function g (line 1) | function g(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writele...
  function y (line 1) | function y(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(g(n),t)v(...
  function b (line 1) | function b(e,t,n,r){n||w(e,t),t.pendingcb--,r(),k(e,t)}
  function w (line 1) | function w(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain...
  function C (line 1) | function C(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writ...
  function E (line 1) | function E(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!...
  function x (line 1) | function x(e,t){e._final(function(n){t.pendingcb--,n&&e.emit("error",n),...
  function S (line 1) | function S(e,t){t.prefinished||t.finalCalled||("function"==typeof e._fin...
  function k (line 1) | function k(e,t){var n=E(t);return n&&(S(e,t),0===t.pendingcb&&(t.finishe...
  function _ (line 1) | function _(e,t,n){t.ending=!0,k(e,t),n&&(t.finished?M.nextTick(n):e.once...
  function O (line 1) | function O(e,t,n){var r=e.entry;for(e.entry=null;r;){var o=r.callback;t....
  function r (line 1) | function r(e,t){var n=a(e),r=!n&&i(e),u=!n&&!r&&s(e),h=!n&&!r&&!u&&l(e),...
  function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
  function r (line 1) | function r(e){var t=e.schema,n=e.value,r=e.registry.widgets.BaseInput;re...
  function n (line 1) | function n(e){return e!==e}
  function r (line 1) | function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function o (line 1) | function o(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?i(e):t}
  function i (line 1) | function i(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function a (line 1) | function a(e){return(a=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function s (line 1) | function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function c (line 1) | function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e._...
  function l (line 1) | function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function u (line 1) | function u(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?f(e):t}
  function f (line 1) | function f(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function h (line 1) | function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function d (line 1) | function d(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function p (line 1) | function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e._...
  function m (line 1) | function m(e){return y(e)||g(e)||v()}
  function v (line 1) | function v(){throw new TypeError("Invalid attempt to spread non-iterable...
  function g (line 1) | function g(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Ob...
  function y (line 1) | function y(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e...
  function b (line 1) | function b(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=...
  function w (line 1) | function w(e){var t=[];return Pe.a.Children.forEach(e,function(e){t.push...
  function C (line 1) | function C(e){return"string"==typeof e?e:""}
  function E (line 1) | function E(e){if(!e)return null;var t=e.props;if("value"in t)return t.va...
  function x (line 1) | function x(e,t){return"value"===t?E(e):e.props[t]}
  function S (line 1) | function S(e){return e.multiple}
  function k (line 1) | function k(e){return e.combobox}
  function _ (line 1) | function _(e){return e.multiple||e.tags}
  function O (line 1) | function O(e){return _(e)||k(e)}
  function M (line 1) | function M(e){return!O(e)}
  function A (line 1) | function A(e){var t=e;return void 0===e?t=[]:Array.isArray(e)||(t=[e]),t}
  function P (line 1) | function P(e){return"".concat(typeof e,"-").concat(e)}
  function F (line 1) | function F(e){e.preventDefault()}
  function z (line 1) | function z(e,t){var n=-1;if(e)for(var r=0;r<e.length;r++)if(e[r]===t){n=...
  function T (line 1) | function T(e,t){var n;if(e=A(e))for(var r=0;r<e.length;r++)if(e[r].key==...
  function L (line 1) | function L(e,t){if(null===t||void 0===t)return[];var n=[];return Pe.a.Ch...
  function D (line 1) | function D(e){for(var t=0;t<e.length;t++){var n=e[t];if(n.type.isMenuIte...
  function j (line 1) | function j(e,t){for(var n=0;n<t.length;++n)if(e.lastIndexOf(t[n])>0)retu...
  function R (line 1) | function R(e,t){var n=new RegExp("[".concat(t.join(),"]"));return e.spli...
  function N (line 1) | function N(e,t){return!t.props.disabled&&A(x(t,this.props.optionFilterPr...
  function I (line 1) | function I(e,t){if(!M(t)&&!S(t)&&"string"!=typeof e)throw new Error("Inv...
  function H (line 1) | function H(e,t){return function(n){e[t]=n}}
  function V (line 1) | function V(){var e=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-x...
  function B (line 1) | function B(){return B=Object.assign||function(e){for(var t=1;t<arguments...
  function $ (line 1) | function $(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function W (line 1) | function W(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function U (line 1) | function U(e,t,n){return t&&W(e.prototype,t),n&&W(e,n),e}
  function K (line 1) | function K(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?G(e):t}
  function q (line 1) | function q(e){return(q=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function G (line 1) | function G(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function Y (line 1) | function Y(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function Q (line 1) | function Q(e,t){return(Q=Object.setPrototypeOf||function(e,t){return e._...
  function X (line 1) | function X(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function J (line 1) | function J(){return J=Object.assign||function(e){for(var t=1;t<arguments...
  function Z (line 1) | function Z(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function ee (line 1) | function ee(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function te (line 1) | function te(e,t,n){return t&&ee(e.prototype,t),n&&ee(e,n),e}
  function ne (line 1) | function ne(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?oe(e...
  function re (line 1) | function re(e){return(re=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function oe (line 1) | function oe(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function ie (line 1) | function ie(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function ae (line 1) | function ae(e,t){return(ae=Object.setPrototypeOf||function(e,t){return e...
  function se (line 1) | function se(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enum...
  function ce (line 1) | function ce(){return ce=Object.assign||function(e){for(var t=1;t<argumen...
  function le (line 1) | function le(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function ue (line 1) | function ue(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function fe (line 1) | function fe(e,t,n){return t&&ue(e.prototype,t),n&&ue(e,n),e}
  function he (line 1) | function he(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?pe(e...
  function de (line 1) | function de(e){return(de=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function pe (line 1) | function pe(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function me (line 1) | function me(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function ve (line 1) | function ve(e,t){return(ve=Object.setPrototypeOf||function(e,t){return e...
  function ge (line 1) | function ge(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]...
  function ye (line 1) | function ye(e){return(ye="function"==typeof Symbol&&"symbol"==typeof Sym...
  function be (line 1) | function be(){return be=Object.assign||function(e){for(var t=1;t<argumen...
  function we (line 1) | function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enum...
  function Ce (line 1) | function Ce(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function Ee (line 1) | function Ee(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function xe (line 1) | function xe(e,t,n){return t&&Ee(e.prototype,t),n&&Ee(e,n),e}
  function Se (line 1) | function Se(e,t){return!t||"object"!==ye(t)&&"function"!=typeof t?ke(e):t}
  function ke (line 1) | function ke(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function _e (line 1) | function _e(e){return(_e=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function Oe (line 1) | function Oe(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function Me (line 1) | function Me(e,t){return(Me=Object.setPrototypeOf||function(e,t){return e...
  function t (line 1) | function t(){return r(this,t),o(this,a(t).apply(this,arguments))}
  function t (line 1) | function t(){return l(this,t),u(this,h(t).apply(this,arguments))}
  function t (line 1) | function t(e){var n;return $(this,t),n=K(this,q(t).call(this,e)),n.rafIn...
  function t (line 1) | function t(e){var n;return Z(this,t),n=ne(this,re(t).call(this,e)),n.dro...
  function t (line 1) | function t(e){var n;le(this,t),n=he(this,de(t).call(this,e)),n.inputRef=...
  function t (line 1) | function t(e){var n;return Ce(this,t),n=Se(this,_e(t).call(this,e)),n.sa...
  function r (line 1) | function r(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),c=2;c<n;c+...
  function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
  function n (line 1) | function n(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return...
  function n (line 1) | function n(e,t,n,o){for(var i=-1,a=e.length,s=-1,c=n.length,l=-1,u=t.len...
  function r (line 1) | function r(e){var t=[];return x.a.Children.forEach(e,function(e){t.push(...
  function o (line 1) | function o(e,t){var n=null;return e&&e.forEach(function(e){n||e&&e.key==...
  function i (line 1) | function i(e,t,n){var r=null;return e&&e.forEach(function(e){if(e&&e.key...
  function a (line 1) | function a(e,t,n){var r=e.length===t.length;return r&&e.forEach(function...
  function s (line 1) | function s(e,t){var n=[],r={},i=[];return e.forEach(function(e){e&&o(t,e...
  function c (line 1) | function c(e){var t=e.children;return x.a.isValidElement(t)&&!t.key?x.a....
  function l (line 1) | function l(){}
  function t (line 1) | function t(){return m()(this,t),b()(this,(t.__proto__||Object.getPrototy...
  function t (line 1) | function t(e){m()(this,t);var n=b()(this,(t.__proto__||Object.getPrototy...
  function n (line 1) | function n(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);retur...
  function r (line 1) | function r(e,t,n){n=n||{},9===t.nodeType&&(t=o.getWindow(t));var r=n.all...
  function r (line 1) | function r(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=argu...
  function o (line 1) | function o(e){return"string"===e||"url"===e||"hex"===e||"email"===e||"pa...
  function i (line 1) | function i(e,t){return void 0===e||null===e||(!("array"!==t||!Array.isAr...
  function a (line 1) | function a(e,t,n){function r(e){o.push.apply(o,e),++i===a&&n(o)}var o=[]...
  function s (line 1) | function s(e,t,n){function r(a){if(a&&a.length)return void n(a);var s=o;...
  function c (line 1) | function c(e){var t=[];return Object.keys(e).forEach(function(n){t.push....
  function l (line 1) | function l(e,t,n,r){if(t.first){return s(c(e),n,r)}var o=t.firstFields||...
  function u (line 1) | function u(e){return function(t){return t&&t.message?(t.field=t.field||e...
  function f (line 1) | function f(e,t){if(t)for(var n in t)if(t.hasOwnProperty(n)){var r=t[n];"...
  function h (line 1) | function h(e,t,n,o,a,s){!e.required||n.hasOwnProperty(e.field)&&!i(t,s||...
  function d (line 1) | function d(e,t,n,o,i){(/^\s+$/.test(t)||""===t)&&o.push(r(i.messages.whi...
  function p (line 1) | function p(e,t,n,o,i){if(e.required&&void 0===t)return void tt(e,t,n,o,i...
  function m (line 1) | function m(e,t,n,o,i){var a="number"==typeof e.len,s="number"==typeof e....
  function v (line 1) | function v(e,t,n,o,i){e[st]=Array.isArray(e[st])?e[st]:[],-1===e[st].ind...
  function g (line 1) | function g(e,t,n,o,i){if(e.pattern)if(e.pattern instanceof RegExp)e.patt...
  function y (line 1) | function y(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function b (line 1) | function b(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function w (line 1) | function w(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function C (line 1) | function C(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function E (line 1) | function E(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function x (line 1) | function x(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function S (line 1) | function S(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function k (line 1) | function k(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function _ (line 1) | function _(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function O (line 1) | function O(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function M (line 1) | function M(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function A (line 1) | function A(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnPrope...
  function P (line 1) | function P(e,t,n,r,o){var i=[],a=Array.isArray(t)?"array":void 0===t?"un...
  function F (line 1) | function F(e,t,n,r,o){var a=e.type,s=[];if(e.required||!e.required&&r.ha...
  function z (line 1) | function z(){return{default:"Validation error on field %s",required:"%s ...
  function T (line 1) | function T(e){this.rules=null,this._messages=Ot,this.define(e)}
  function L (line 1) | function L(e){return e instanceof Vt}
  function D (line 1) | function D(e){return L(e)?e:new Vt(e)}
  function j (line 1) | function j(e){return e.displayName||e.name||"WrappedComponent"}
  function R (line 1) | function R(e,t){return e.displayName="Form("+j(t)+")",e.WrappedComponent...
  function N (line 1) | function N(e){return e}
  function I (line 1) | function I(e){return Array.prototype.concat.apply([],e)}
  function H (line 1) | function H(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0...
  function V (line 1) | function V(e,t,n){var r={};return H(void 0,e,t,n,function(e,t){r[e]=t}),r}
  function B (line 1) | function B(e,t,n){var r=e.map(function(e){var t=je()({},e,{trigger:e.tri...
  function $ (line 1) | function $(e){return e.filter(function(e){return!!e.rules&&e.rules.lengt...
  function W (line 1) | function W(e){if(!e||!e.target)return e;var t=e.target;return"checkbox"=...
  function U (line 1) | function U(e){return e?e.map(function(e){return e&&e.message?e.message:e...
  function K (line 1) | function K(e,t,n){var r=e,o=t,i=n;return void 0===n&&("function"==typeof...
  function q (line 1) | function q(e){return 0===Object.keys(e).length}
  function G (line 1) | function G(e){return!!e&&e.some(function(e){return e.rules&&e.rules.leng...
  function Y (line 1) | function Y(e,t){return 0===e.lastIndexOf(t,0)}
  function Q (line 1) | function Q(e,t){return 0===t.indexOf(e)&&-1!==[".","["].indexOf(t[e.leng...
  function X (line 1) | function X(e){return V(e,function(e,t){return L(t)},"You must wrap field...
  function J (line 1) | function J(e){return new Wt(e)}
  function Z (line 1) | function Z(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0...
  function ee (line 1) | function ee(e,t){var n=window.getComputedStyle,r=n?n(e):e.currentStyle;i...
  function te (line 1) | function te(e){for(var t=e,n=void 0;"body"!==(n=t.nodeName.toLowerCase()...
  function ne (line 1) | function ne(e){return qt(je()({},e),[Yt])}
  function re (line 1) | function re(e){return(re="function"==typeof Symbol&&"symbol"==typeof Sym...
  function oe (line 1) | function oe(){return oe=Object.assign||function(e){for(var t=1;t<argumen...
  function ie (line 1) | function ie(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enum...
  function ae (line 1) | function ae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function se (line 1) | function se(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function ce (line 1) | function ce(e,t,n){return t&&se(e.prototype,t),n&&se(e,n),e}
  function le (line 1) | function le(e,t){return!t||"object"!==re(t)&&"function"!=typeof t?fe(e):t}
  function ue (line 1) | function ue(e){return(ue=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function fe (line 1) | function fe(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function he (line 1) | function he(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function de (line 1) | function de(e,t){return(de=Object.setPrototypeOf||function(e,t){return e...
  function pe (line 1) | function pe(e){return ge(e)||ve(e)||me()}
  function me (line 1) | function me(){throw new TypeError("Invalid attempt to spread non-iterabl...
  function ve (line 1) | function ve(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===O...
  function ge (line 1) | function ge(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<...
  function ye (line 1) | function ye(e){return e.reduce(function(e,t){return[].concat(pe(e),[" ",...
  function be (line 1) | function be(e){return(be="function"==typeof Symbol&&"symbol"==typeof Sym...
  function we (line 1) | function we(){return we=Object.assign||function(e){for(var t=1;t<argumen...
  function Ce (line 1) | function Ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enum...
  function Ee (line 1) | function Ee(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function xe (line 1) | function xe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function Se (line 1) | function Se(e,t,n){return t&&xe(e.prototype,t),n&&xe(e,n),e}
  function ke (line 1) | function ke(e,t){return!t||"object"!==be(t)&&"function"!=typeof t?_e(e):t}
  function _e (line 1) | function _e(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function Oe (line 1) | function Oe(e){return(Oe=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function Me (line 1) | function Me(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function Ae (line 1) | function Ae(e,t){return(Ae=Object.setPrototypeOf||function(e,t){return e...
  function t (line 1) | function t(e){var t=void 0,n=void 0,r=[],o={};for(t=0;t<e.length;t++)!fu...
  function n (line 1) | function n(e,t){return je()({},t,{fullField:i.fullField+"."+e})}
  function o (line 1) | function o(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0...
  function e (line 1) | function e(t){Nt()(this,e),Ut.call(this),this.fields=X(t),this.fieldsMet...
  function t (line 1) | function t(){var e;return ae(this,t),e=le(this,ue(t).apply(this,argument...
  function t (line 1) | function t(e){var n;return Ee(this,t),n=ke(this,Oe(t).call(this,e)),n.re...
  function r (line 1) | function r(){this.__data__=o?o(null):{},this.size=0}
  function n (line 1) | function n(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function r (line 1) | function r(){o.call(this)}
  function n (line 1) | function n(t){e.writable&&!1===e.write(t)&&l.pause&&l.pause()}
  function r (line 1) | function r(){l.readable&&l.resume&&l.resume()}
  function i (line 1) | function i(){u||(u=!0,e.end())}
  function a (line 1) | function a(){u||(u=!0,"function"==typeof e.destroy&&e.destroy())}
  function s (line 1) | function s(e){if(c(),0===o.listenerCount(this,"error"))throw e}
  function c (line 1) | function c(){l.removeListener("data",n),e.removeListener("drain",r),l.re...
  function n (line 1) | function n(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function r (line 1) | function r(e,t,n,r){if(void 0===r&&(r=!0),o(e))return e;if(i(e)){if(t&&o...
  function r (line 1) | function r(e){if(!a(e)||o(e)!=s)return!1;var t=i(e);if(null===t)return!0...
  function r (line 1) | function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function o (line 1) | function o(){return o=Object.assign||function(e){for(var t=1;t<arguments...
  function i (line 1) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function a (line 1) | function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function s (line 1) | function s(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function c (line 1) | function c(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),e}
  function l (line 1) | function l(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?u(e):t}
  function u (line 1) | function u(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function f (line 1) | function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function h (line 1) | function h(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function d (line 1) | function d(e,t){return(d=Object.setPrototypeOf||function(e,t){return e._...
  function p (line 1) | function p(e,t){var n=t.indicator,r="".concat(e,"-dot");return v.isValid...
  function m (line 1) | function m(e,t){return!!e&&!!t&&!isNaN(Number(t))}
  function t (line 1) | function t(e){var n;a(this,t),n=l(this,f(t).call(this,e)),n.debouncifyUp...
  function r (line 1) | function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function o (line 1) | function o(){return o=Object.assign||function(e){for(var t=1;t<arguments...
  function i (line 1) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function a (line 1) | function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function s (line 1) | function s(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function c (line 1) | function c(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),e}
  function l (line 1) | function l(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?u(e):t}
  function u (line 1) | function u(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function f (line 1) | function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function h (line 1) | function h(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function d (line 1) | function d(e,t){return(d=Object.setPrototypeOf||function(e,t){return e._...
  function p (line 1) | function p(e){return void 0===e||null===e?"":e}
  function m (line 1) | function m(e){return!!("prefix"in e||e.suffix||e.allowClear)}
  function v (line 1) | function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function g (line 1) | function g(e){return(g="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function y (line 1) | function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function b (line 1) | function b(){return b=Object.assign||function(e){for(var t=1;t<arguments...
  function w (line 1) | function w(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function C (line 1) | function C(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function E (line 1) | function E(e,t,n){return t&&C(e.prototype,t),n&&C(e,n),e}
  function x (line 1) | function x(e,t){return!t||"object"!==g(t)&&"function"!=typeof t?S(e):t}
  function S (line 1) | function S(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function k (line 1) | function k(e){return(k=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function _ (line 1) | function _(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function O (line 1) | function O(e,t){return(O=Object.setPrototypeOf||function(e,t){return e._...
  function M (line 1) | function M(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments...
  function A (line 1) | function A(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments...
  function P (line 1) | function P(e){return(P="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function F (line 1) | function F(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function z (line 1) | function z(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function T (line 1) | function T(e,t,n){return t&&z(e.prototype,t),n&&z(e,n),e}
  function L (line 1) | function L(e,t){return!t||"object"!==P(t)&&"function"!=typeof t?D(e):t}
  function D (line 1) | function D(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function j (line 1) | function j(e){return(j=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function R (line 1) | function R(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function N (line 1) | function N(e,t){return(N=Object.setPrototypeOf||function(e,t){return e._...
  function I (line 1) | function I(e){return(I="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function H (line 1) | function H(){return H=Object.assign||function(e){for(var t=1;t<arguments...
  function V (line 1) | function V(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function B (line 1) | function B(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function $ (line 1) | function $(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function W (line 1) | function W(e,t,n){return t&&$(e.prototype,t),n&&$(e,n),e}
  function U (line 1) | function U(e,t){return!t||"object"!==I(t)&&"function"!=typeof t?K(e):t}
  function K (line 1) | function K(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function q (line 1) | function q(e){return(q=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function G (line 1) | function G(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function Y (line 1) | function Y(e,t){return(Y=Object.setPrototypeOf||function(e,t){return e._...
  function Q (line 1) | function Q(e){return window.requestAnimationFrame?window.requestAnimatio...
  function X (line 1) | function X(e){window.cancelAnimationFrame?window.cancelAnimationFrame(e)...
  function J (line 1) | function J(e){return(J="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function Z (line 1) | function Z(){return Z=Object.assign||function(e){for(var t=1;t<arguments...
  function ee (line 1) | function ee(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enum...
  function te (line 1) | function te(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function ne (line 1) | function ne(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function re (line 1) | function re(e,t,n){return t&&ne(e.prototype,t),n&&ne(e,n),e}
  function oe (line 1) | function oe(e,t){return!t||"object"!==J(t)&&"function"!=typeof t?ie(e):t}
  function ie (line 1) | function ie(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function ae (line 1) | function ae(e){return(ae=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function se (line 1) | function se(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function ce (line 1) | function ce(e,t){return(ce=Object.setPrototypeOf||function(e,t){return e...
  function t (line 1) | function t(e){var n;a(this,t),n=l(this,f(t).call(this,e)),n.handleKeyDow...
  function t (line 1) | function t(){var e;return w(this,t),e=x(this,k(t).apply(this,arguments))...
  function t (line 1) | function t(){var e;return F(this,t),e=L(this,j(t).apply(this,arguments))...
  function t (line 1) | function t(){var e;return B(this,t),e=U(this,q(t).apply(this,arguments))...
  function t (line 1) | function t(){var e;return te(this,t),e=oe(this,ae(t).apply(this,argument...
  function r (line 1) | function r(e){var t=o(this,e).delete(e);return this.size-=t?1:0,t}
  function e (line 1) | function e(){}
  function r (line 1) | function r(e,t){return e&&o(e,i(t))}
  function r (line 1) | function r(e,t,n){return t in e?o(e,t,{value:n,enumerable:!0,configurabl...
  function r (line 1) | function r(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}
  function n (line 1) | function n(e){if(null!=e){try{return o.call(e)}catch(e){}try{return e+""...
  function r (line 1) | function r(e,t){return!t||"object"!==o(t)&&"function"!=typeof t?i(e):t}
  function r (line 1) | function r(){return r=Object.assign||function(e){for(var t=1;t<arguments...
  function o (line 1) | function o(e){s=e?r({},s,e):r({},a.a.Modal)}
  function i (line 1) | function i(){return s}
  function r (line 1) | function r(e){var t=e.registry.widgets.BaseInput;return a.default.create...
  function e (line 1) | function e(){}
  function r (line 1) | function r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
  function o (line 1) | function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
  function n (line 1) | function n(e){return!!e&&"object"==typeof e}
  function r (line 1) | function r(e,t){var n=null==e?void 0:e[t];return a(n)?n:void 0}
  function o (line 1) | function o(e){return i(e)&&h.call(e)==s}
  function i (line 1) | function i(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}
  function a (line 1) | function a(e){return null!=e&&(o(e)?d.test(u.call(e)):n(e)&&c.test(e))}
  function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
  function r (line 1) | function r(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),c=2;c<n;c+...
  function r (line 1) | function r(e){if(null===e||void 0===e)throw new TypeError("Object.assign...
  function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
  function o (line 1) | function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function i (line 1) | function i(e,t){if(!e)throw new ReferenceError("this hasn't been initial...
  function a (line 1) | function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function s (line 1) | function s(e){return e.displayName||e.name||"Component"}
  function c (line 1) | function c(e){return!e.prototype.render}
  function l (line 1) | function l(e){var t=!!e,n=e||w;return function(r){var l=function(s){func...
  function e (line 1) | function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function r (line 1) | function r(e){if(e.status>=200&&e.status<300)return e;var t=f[e.status]|...
  function o (line 1) | function o(e,t){var n={credentials:"include"},o=(0,a.default)({},n,t);re...
  function r (line 1) | function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n ...
  function r (line 1) | function r(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n...
  function o (line 1) | function o(e,t,n){return{name:e,theme:t,icon:n}}
  function r (line 1) | function r(e){function t(t){if(!t||"string"!=typeof t)return!1;var n=t.s...
  function r (line 1) | function r(e){return n(o(e))}
  function o (line 1) | function o(e){var t=i[e];if(!(t+1))throw new Error("Cannot find module '...
  function r (line 1) | function r(e,t){for(var n,r=[],o=0,i=0,a="",s=t&&t.delimiter||"/";null!=...
  function o (line 1) | function o(e,t){return s(r(e,t))}
  function i (line 1) | function i(e){return encodeURI(e).replace(/[\/?#]/g,function(e){return"%...
  function a (line 1) | function a(e){return encodeURI(e).replace(/[?#]/g,function(e){return"%"+...
  function s (line 1) | function s(e){for(var t=new Array(e.length),n=0;n<e.length;n++)"object"=...
  function c (line 1) | function c(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}
  function l (line 1) | function l(e){return e.replace(/([=!:$\/()])/g,"\\$1")}
  function u (line 1) | function u(e,t){return e.keys=t,e}
  function f (line 1) | function f(e){return e.sensitive?"":"i"}
  function h (line 1) | function h(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.l...
  function d (line 1) | function d(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(v(e[o],t,n).sou...
  function p (line 1) | function p(e,t,n){return m(r(e,n),t,n)}
  function m (line 1) | function m(e,t,n){g(t)||(n=t||n,t=[]),n=n||{};for(var r=n.strict,o=!1!==...
  function v (line 1) | function v(e,t,n){return g(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp...
  function r (line 1) | function r(e){return{width:o(window.getComputedStyle(e).width),height:o(...
  function o (line 1) | function o(e){var t=/^([0-9\.]+)px$/.exec(e);return t?parseFloat(t[1]):0}
  function e (line 1) | function e(e){var t=this;this.handler=e,this.listenedElement=null,this.h...
  function r (line 1) | function r(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var s,c=o(e);!(r=(s=...
  function e (line 1) | function e(){return t++}
  function r (line 1) | function r(){return localStorage.getItem("antd-pro-authority")||"admin"}
  function o (line 1) | function o(e){return localStorage.setItem("antd-pro-authority",e)}
  function r (line 1) | function r(e,t){for(var n=e.length,r=a(t.length,n),s=o(e);r--;){var c=t[...
  function r (line 1) | function r(){this.size=0,this.__data__={hash:new o,map:new(a||i),string:...
  function r (line 1) | function r(){if(!window.matchMedia)throw new Error("matchMedia not prese...
  function n (line 1) | function n(e){return this.__data__.set(e,r),this}
  function r (line 1) | function r(e){return"function"==typeof e?e:o}
  function r (line 1) | function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n ...
  function r (line 1) | function r(e,t){var n=this._transformState;n.transforming=!1;var r=n.wri...
  function o (line 1) | function o(e){if(!(this instanceof o))return new o(e);s.call(this,e),thi...
  function i (line 1) | function i(){var e=this;"function"==typeof this._flush?this._flush(funct...
  function a (line 1) | function a(e,t,n){if(t)return e.emit("error",t);if(null!=n&&e.push(n),e....
  function r (line 1) | function r(e){var t=e.schema,n=e.name,r=e.uiSchema,o=e.idSchema,i=e.form...
  function r (line 1) | function r(e,t,n){function i(e){var t=e.$schema;return t&&!s.getSchema(t...
  function r (line 1) | function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function o (line 1) | function o(e,t){if(!e)throw new ReferenceError("this hasn't been initial...
  function i (line 1) | function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function e (line 1) | function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function t (line 1) | function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf...
  function r (line 1) | function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(...
  function r (line 1) | function r(e){return void 0===e&&(e=""),"lodash-decorators -> "+e}
  function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
  function n (line 1) | function n(e,t,n,o){for(var i=-1,a=e.length,s=n.length,c=-1,l=t.length,u...
  function r (line 1) | function r(e){if(!(this instanceof r))return new r(e);l.call(this,e),u.c...
  function o (line 1) | function o(){this.allowHalfOpen||this._writableState.ended||a.nextTick(i...
  function i (line 1) | function i(e){e.end()}
  function r (line 1) | function r(e,t){var n=o(this,e),r=n.size;return n.set(e,t),this.size+=n....
  function n (line 1) | function n(e){return this.__data__.get(e)}
  function r (line 1) | function r(e,t,n){void 0===n&&(n=[]);for(var r=i.apply(void 0,[Object.ge...
  function o (line 1) | function o(e,t,n){var r=Object.getOwnPropertyDescriptor(e,n);if(!r||r.co...
  function r (line 1) | function r(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. L...
  function o (line 1) | function o(e){var t=r(e),n=t[0],o=t[1];return 3*(n+o)/4-o}
  function i (line 1) | function i(e,t,n){return 3*(t+n)/4-n}
  function a (line 1) | function a(e){for(var t,n=r(e),o=n[0],a=n[1],s=new h(i(e,o,a)),c=0,l=a>0...
  function s (line 1) | function s(e){return u[e>>18&63]+u[e>>12&63]+u[e>>6&63]+u[63&e]}
  function c (line 1) | function c(e,t,n){for(var r,o=[],i=t;i<n;i+=3)r=(e[i]<<16&16711680)+(e[i...
  function l (line 1) | function l(e){for(var t,n=e.length,r=n%3,o=[],i=0,a=n-r;i<a;i+=16383)o.p...
  function r (line 1) | function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}
  function o (line 1) | function o(){return(o=Object.assign||function(e){for(var t=1;t<arguments...
  function i (line 1) | function i(e){return"/"===e.charAt(0)?e:"/"+e}
  function a (line 1) | function a(e){return"/"===e.charAt(0)?e.substr(1):e}
  function s (line 1) | function s(e,t){return new RegExp("^"+t+"(\\/|\\?|#|$)","i").test(e)}
  function c (line 1) | function c(e,t){return s(e,t)?e.substr(t.length):e}
  function l (line 1) | function l(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}
  function u (line 1) | function u(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.subst...
  function f (line 1) | function f(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?...
  function h (line 1) | function h(e,t,n,r){var i;"string"==typeof e?(i=u(e)).state=t:(void 0===...
  function d (line 1) | function d(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.h...
  function p (line 1) | function p(){var e=null,t=[];return{setPrompt:function(t){return e=t,fun...
  function m (line 1) | function m(e,t){t(window.confirm(e))}
  function v (line 1) | function v(){var e=window.navigator.userAgent;return(-1===e.indexOf("And...
  function g (line 1) | function g(){return-1===window.navigator.userAgent.indexOf("Trident")}
  function y (line 1) | function y(){return-1===window.navigator.userAgent.indexOf("Firefox")}
  function b (line 1) | function b(e){void 0===e.state&&navigator.userAgent.indexOf("CriOS")}
  function w (line 1) | function w(){try{return window.history.state||{}}catch(e){return{}}}
  function C (line 1) | function C(e){function t(e){var t=e||{},n=t.key,r=t.state,o=window.locat...
  function E (line 1) | function E(){var e=window.location.href,t=e.indexOf("#");return-1===t?""...
  function x (line 1) | function x(e){window.location.hash=e}
  function S (line 1) | function S(e){var t=window.location.href.indexOf("#");window.location.re...
  function k (line 1) | function k(e){function t(){var e=M(E());return k&&(e=c(e,k)),h(e)}functi...
  function _ (line 1) | function _(e,t,n){return Math.min(Math.max(e,t),n)}
  function O (line 1) | function O(e){function t(e){o(w,e),w.length=w.entries.length,v.notifyLis...
  function r (line 1) | function r(e,t,n){var r=t+"";return a(e,i(r,s(o(r),n)))}
  function n (line 1) | function n(e){var t=e.match(r);return t?t[1].split(o):[]}
  function r (line 1) | function r(){var e=[].slice.call(arguments,0);return 1===e.length?e[0]:f...
  function r (line 1) | function r(){return i.TYPED_ARRAY_SUPPORT?2147483647:1073741823}
  function o (line 1) | function o(e,t){if(r()<t)throw new RangeError("Invalid typed array lengt...
  function i (line 1) | function i(e,t,n){if(!(i.TYPED_ARRAY_SUPPORT||this instanceof i))return ...
  function a (line 1) | function a(e,t,n,r){if("number"==typeof t)throw new TypeError('"value" a...
  function s (line 1) | function s(e){if("number"!=typeof e)throw new TypeError('"size" argument...
  function c (line 1) | function c(e,t,n,r){return s(t),t<=0?o(e,t):void 0!==n?"string"==typeof ...
  function l (line 1) | function l(e,t){if(s(t),e=o(e,t<0?0:0|p(t)),!i.TYPED_ARRAY_SUPPORT)for(v...
  function u (line 1) | function u(e,t,n){if("string"==typeof n&&""!==n||(n="utf8"),!i.isEncodin...
  function f (line 1) | function f(e,t){var n=t.length<0?0:0|p(t.length);e=o(e,n);for(var r=0;r<...
  function h (line 1) | function h(e,t,n,r){if(t.byteLength,n<0||t.byteLength<n)throw new RangeE...
  function d (line 1) | function d(e,t){if(i.isBuffer(t)){var n=0|p(t.length);return e=o(e,n),0=...
  function p (line 1) | function p(e){if(e>=r())throw new RangeError("Attempt to allocate Buffer...
  function m (line 1) | function m(e){return+e!=e&&(e=0),i.alloc(+e)}
  function v (line 1) | function v(e,t){if(i.isBuffer(e))return e.length;if("undefined"!=typeof ...
  function g (line 1) | function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)ret...
  function y (line 1) | function y(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}
  function b (line 1) | function b(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=...
  function w (line 1) | function w(e,t,n,r,o){function i(e,t){return 1===a?e[t]:e.readUInt16BE(t...
  function C (line 1) | function C(e,t,n,r){n=Number(n)||0;var o=e.length-n;r?(r=Number(r))>o&&(...
  function E (line 1) | function E(e,t,n,r){return G(W(t,e.length-n),e,n,r)}
  function x (line 1) | function x(e,t,n,r){return G(U(t),e,n,r)}
  function S (line 1) | function S(e,t,n,r){return x(e,t,n,r)}
  function k (line 1) | function k(e,t,n,r){return G(q(t),e,n,r)}
  function _ (line 1) | function _(e,t,n,r){return G(K(t,e.length-n),e,n,r)}
  function O (line 1) | function O(e,t,n){return 0===t&&n===e.length?Q.fromByteArray(e):Q.fromBy...
  function M (line 1) | function M(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o<n;){var i=e[...
  function A (line 1) | function A(e){var t=e.length;if(t<=Z)return String.fromCharCode.apply(St...
  function P (line 1) | function P(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;o<n;++o)r+...
  function F (line 1) | function F(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;o<n;++o)r+...
  function z (line 1) | function z(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);...
  function T (line 1) | function T(e,t,n){for(var r=e.slice(t,n),o="",i=0;i<r.length;i+=2)o+=Str...
  function L (line 1) | function L(e,t,n){if(e%1!=0||e<0)throw new RangeError("offset is not uin...
  function D (line 1) | function D(e,t,n,r,o,a){if(!i.isBuffer(e))throw new TypeError('"buffer" ...
  function j (line 1) | function j(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n...
  function R (line 1) | function R(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.len...
  function N (line 1) | function N(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out ...
  function I (line 1) | function I(e,t,n,r,o){return o||N(e,t,n,4,3.4028234663852886e38,-3.40282...
  function H (line 1) | function H(e,t,n,r,o){return o||N(e,t,n,8,1.7976931348623157e308,-1.7976...
  function V (line 1) | function V(e){if(e=B(e).replace(ee,""),e.length<2)return"";for(;e.length...
  function B (line 1) | function B(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}
  function $ (line 1) | function $(e){return e<16?"0"+e.toString(16):e.toString(16)}
  function W (line 1) | function W(e,t){t=t||1/0;for(var n,r=e.length,o=null,i=[],a=0;a<r;++a){i...
  function U (line 1) | function U(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n)...
  function K (line 1) | function K(e,t){for(var n,r,o,i=[],a=0;a<e.length&&!((t-=2)<0);++a)n=e.c...
  function q (line 1) | function q(e){return Q.toByteArray(V(e))}
  function G (line 1) | function G(e,t,n,r){for(var o=0;o<r&&!(o+n>=t.length||o>=e.length);++o)t...
  function Y (line 1) | function Y(e){return e!==e}
  function n (line 1) | function n(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}
  function r (line 1) | function r(e,t){return!t||"object"!==o(t)&&"function"!=typeof t?i(e):t}
  function r (line 1) | function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function o (line 1) | function o(e,t){if(!e)throw new ReferenceError("this hasn't been initial...
  function i (line 1) | function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function a (line 1) | function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function s (line 1) | function s(e,t){if(!e)throw new ReferenceError("this hasn't been initial...
  function c (line 1) | function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function l (line 1) | function l(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototyp...
  function u (line 1) | function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function f (line 1) | function f(e,t){if(!e)throw new ReferenceError("this hasn't been initial...
  function h (line 1) | function h(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function d (line 1) | function d(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototyp...
  function t (line 1) | function t(){var n,i,a;r(this,t);for(var s=arguments.length,c=Array(s),l...
  function t (line 1) | function t(){var n,r,o;a(this,t);for(var i=arguments.length,c=Array(i),l...
  function t (line 1) | function t(){var n,r,o;u(this,t);for(var i=arguments.length,a=Array(i),s...
  function r (line 1) | function r(){return r=Object.assign||function(e){for(var t=1;t<arguments...
  function o (line 1) | function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0...
  function i (line 1) | function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function a (line 1) | function a(e){var t=null;return W.test(e)?t="filled":U.test(e)?t="outlin...
  function s (line 1) | function s(e){return e.replace(W,"").replace(U,"").replace(K,"")}
  function c (line 1) | function c(e,t){var n=e;return"filled"===t?n+="-fill":"outlined"===t?n+=...
  function l (line 1) | function l(e){switch(e){case"cross":return"close"}return e}
  function u (line 1) | function u(e){return I.setTwoToneColors({primaryColor:e})}
  function f (line 1) | function f(){return I.getTwoToneColors().primaryColor}
  function h (line 1) | function h(){return h=Object.assign||function(e){for(var t=1;t<arguments...
  function d (line 1) | function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function p (line 1) | function p(){throw new TypeError("Invalid attempt to spread non-iterable...
  function m (line 1) | function m(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Ob...
  function v (line 1) | function v(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e...
  function t (line 1) | function t(){return M()(this,t),z()(this,(t.__proto__||Object.getPrototy...
  function r (line 1) | function r(){return r=Object.assign||function(e){for(var t=1;t<arguments...
  function r (line 1) | function r(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(Array....
  function r (line 1) | function r(e,t,n,r){function c(){for(var t=-1,i=arguments.length,s=-1,f=...
  function r (line 1) | function r(e){var t,n=e.Symbol;return"function"==typeof n?n.observable?t...
  function r (line 1) | function r(e){return i(e)&&o(e)}
  function r (line 1) | function r(e){if(!o(e))return a(e);var t=i(e),n=[];for(var r in e)("cons...
  function n (line 1) | function n(e){return this.__data__.has(e)}
  function r (line 1) | function r(e,t,n){return t===t?a(e,t,n):o(e,i,n)}
  function e (line 1) | function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.se...
  function r (line 1) | function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0...
  function o (line 1) | function o(e,t,n){function r(){for(var r=arguments.length,i=Array(r),a=0...
  function i (line 1) | function i(e,t,n){Rn[t]||(zn()(e,t,n),Rn[t]=!e)}
  function a (line 1) | function a(e,t){var n=e.indexOf(t),r=e.slice(0,n),o=e.slice(n+1,e.length...
  function s (line 1) | function s(e){return Object.keys(e).reduce(function(t,n){return"data-"!=...
  function c (line 1) | function c(e,t){var n=t.table,r=n.props,o=r.prefixCls,i=r.expandIconAsCe...
  function l (line 1) | function l(e){var t=e.row,n=e.index,r=e.height,o=e.components,i=e.onHead...
  function u (line 1) | function u(e,t){var n=e.fixedColumnsHeadRowsHeight,r=t.columns,o=t.rows,...
  function f (line 1) | function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
  function h (line 1) | function h(e,t){var n=t.table,r=n.components,o=n.props,i=o.prefixCls,a=o...
  function d (line 1) | function d(e){return e&&!sn.a.isValidElement(e)&&"[object Object]"===Obj...
  function p (line 1) | function p(e,t){var n=e.expandedRowsHeight,r=e.fixedColumnsBodyRowsHeigh...
  function m (line 1) | function m(e,t){var n=t.table,o=n.props,i=o.prefixCls,a=o.scroll,s=o.sho...
  function v (line 1) | function v(e,t){var n=t.table,o=n.props,i=o.prefixCls,a=o.scroll,s=e.col...
  function g (line 1) | function g(){}
  function y (line 1) | function y(e){return(y="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function b (line 1) | function b(){return b=Object.assign||function(e){for(var t=1;t<arguments...
  function w (line 1) | function w(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function C (line 1) | function C(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function E (line 1) | function E(e,t,n){return t&&C(e.prototype,t),n&&C(e,n),e}
  function x (line 1) | function x(e,t){return!t||"object"!==y(t)&&"function"!=typeof t?S(e):t}
  function S (line 1) | function S(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function k (line 1) | function k(e){return(k=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function _ (line 1) | function _(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function O (line 1) | function O(e,t){return(O=Object.setPrototypeOf||function(e,t){return e._...
  function M (line 1) | function M(e){return(M="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function A (line 1) | function A(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function P (line 1) | function P(){return P=Object.assign||function(e){for(var t=1;t<arguments...
  function F (line 1) | function F(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function z (line 1) | function z(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function T (line 1) | function T(e,t,n){return t&&z(e.prototype,t),n&&z(e,n),e}
  function L (line 1) | function L(e,t){return!t||"object"!==M(t)&&"function"!=typeof t?j(e):t}
  function D (line 1) | function D(e){return(D=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function j (line 1) | function j(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function R (line 1) | function R(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function N (line 1) | function N(e,t){return(N=Object.setPrototypeOf||function(e,t){return e._...
  function I (line 1) | function I(e){return(I="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function H (line 1) | function H(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function V (line 1) | function V(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function B (line 1) | function B(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function $ (line 1) | function $(e,t,n){return t&&B(e.prototype,t),n&&B(e,n),e}
  function W (line 1) | function W(e,t){return!t||"object"!==I(t)&&"function"!=typeof t?U(e):t}
  function U (line 1) | function U(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function K (line 1) | function K(e){return(K=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function q (line 1) | function q(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function G (line 1) | function G(e,t){return(G=Object.setPrototypeOf||function(e,t){return e._...
  function Y (line 1) | function Y(e){var t=null,n=!1;return an.Children.forEach(e,function(e){e...
  function Q (line 1) | function Q(e){return(Q="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function X (line 1) | function X(){return X=Object.assign||function(e){for(var t=1;t<arguments...
  function J (line 1) | function J(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function Z (line 1) | function Z(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function ee (line 1) | function ee(e,t,n){return t&&Z(e.prototype,t),n&&Z(e,n),e}
  function te (line 1) | function te(e,t){return!t||"object"!==Q(t)&&"function"!=typeof t?ne(e):t}
  function ne (line 1) | function ne(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function re (line 1) | function re(e){return(re=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function oe (line 1) | function oe(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function ie (line 1) | function ie(e,t){return(ie=Object.setPrototypeOf||function(e,t){return e...
  function ae (line 1) | function ae(e){return le(e)||ce(e)||se()}
  function se (line 1) | function se(){throw new TypeError("Invalid attempt to spread non-iterabl...
  function ce (line 1) | function ce(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===O...
  function le (line 1) | function le(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<...
  function ue (line 1) | function ue(){return ue=Object.assign||function(e){for(var t=1;t<argumen...
  function fe (line 1) | function fe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[...
  function he (line 1) | function he(e,t){var n=arguments.length>2&&void 0!==arguments[2]?argumen...
  function de (line 1) | function de(e,t){return e.reduce(function(e,n){if(t(n)&&e.push(n),n.chil...
  function pe (line 1) | function pe(e){var t=[];return an.Children.forEach(e,function(e){if(an.i...
  function me (line 1) | function me(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments...
  function ve (line 1) | function ve(e){return(ve="function"==typeof Symbol&&"symbol"==typeof Sym...
  function ge (line 1) | function ge(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enum...
  function ye (line 1) | function ye(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function be (line 1) | function be(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function we (line 1) | function we(e,t,n){return t&&be(e.prototype,t),n&&be(e,n),e}
  function Ce (line 1) | function Ce(e,t){return!t||"object"!==ve(t)&&"function"!=typeof t?xe(e):t}
  function Ee (line 1) | function Ee(e){return(Ee=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function xe (line 1) | function xe(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function Se (line 1) | function Se(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function ke (line 1) | function ke(e,t){return(ke=Object.setPrototypeOf||function(e,t){return e...
  function _e (line 1) | function _e(e){e.stopPropagation(),e.nativeEvent.stopImmediatePropagatio...
  function Oe (line 1) | function Oe(){return Oe=Object.assign||function(e){for(var t=1;t<argumen...
  function Me (line 1) | function Me(e){function t(e){o=Oe({},o,e);for(var t=0;t<i.length;t++)i[t...
  function Ae (line 1) | function Ae(e){return(Ae="function"==typeof Symbol&&"symbol"==typeof Sym...
  function Pe (line 1) | function Pe(){return Pe=Object.assign||function(e){for(var t=1;t<argumen...
  function Fe (line 1) | function Fe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function ze (line 1) | function ze(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function Te (line 1) | function Te(e,t,n){return t&&ze(e.prototype,t),n&&ze(e,n),e}
  function Le (line 1) | function Le(e,t){return!t||"object"!==Ae(t)&&"function"!=typeof t?De(e):t}
  function De (line 1) | function De(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function je (line 1) | function je(e){return(je=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function Re (line 1) | function Re(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function Ne (line 1) | function Ne(e,t){return(Ne=Object.setPrototypeOf||function(e,t){return e...
  function Ie (line 1) | function Ie(e){return(Ie="function"==typeof Symbol&&"symbol"==typeof Sym...
  function He (line 1) | function He(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enum...
  function Ve (line 1) | function Ve(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function Be (line 1) | function Be(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function $e (line 1) | function $e(e,t,n){return t&&Be(e.prototype,t),n&&Be(e,n),e}
  function We (line 1) | function We(e,t){return!t||"object"!==Ie(t)&&"function"!=typeof t?Ue(e):t}
  function Ue (line 1) | function Ue(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function Ke (line 1) | function Ke(e){return(Ke=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function qe (line 1) | function qe(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function Ge (line 1) | function Ge(e,t){return(Ge=Object.setPrototypeOf||function(e,t){return e...
  function Ye (line 1) | function Ye(e){return(Ye="function"==typeof Symbol&&"symbol"==typeof Sym...
  function Qe (line 1) | function Qe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function Xe (line 1) | function Xe(e,t){return!t||"object"!==Ye(t)&&"function"!=typeof t?Je(e):t}
  function Je (line 1) | function Je(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function Ze (line 1) | function Ze(e){return(Ze=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function et (line 1) | function et(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function tt (line 1) | function tt(e,t){return(tt=Object.setPrototypeOf||function(e,t){return e...
  function nt (line 1) | function nt(e){return(nt="function"==typeof Symbol&&"symbol"==typeof Sym...
  function rt (line 1) | function rt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function ot (line 1) | function ot(e,t){return!t||"object"!==nt(t)&&"function"!=typeof t?it(e):t}
  function it (line 1) | function it(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function at (line 1) | function at(e){return(at=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function st (line 1) | function st(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function ct (line 1) | function ct(e,t){return(ct=Object.setPrototypeOf||function(e,t){return e...
  function lt (line 1) | function lt(e){return(lt="function"==typeof Symbol&&"symbol"==typeof Sym...
  function ut (line 1) | function ut(){return ut=Object.assign||function(e){for(var t=1;t<argumen...
  function ft (line 1) | function ft(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enum...
  function ht (line 1) | function ht(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function dt (line 1) | function dt(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function pt (line 1) | function pt(e,t,n){return t&&dt(e.prototype,t),n&&dt(e,n),e}
  function mt (line 1) | function mt(e,t){return!t||"object"!==lt(t)&&"function"!=typeof t?vt(e):t}
  function vt (line 1) | function vt(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function gt (line 1) | function gt(e){return(gt=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function yt (line 1) | function yt(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function bt (line 1) | function bt(e,t){return(bt=Object.setPrototypeOf||function(e,t){return e...
  function wt (line 1) | function wt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[...
  function Ct (line 1) | function Ct(){}
  function Et (line 1) | function Et(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}
  function xt (line 1) | function xt(e,t,n){return n}
  function St (line 1) | function St(e,t,n){var r=e;return void 0===r&&(r=t.pageSize),Math.floor(...
  function kt (line 1) | function kt(e){return(kt="function"==typeof Symbol&&"symbol"==typeof Sym...
  function _t (line 1) | function _t(){return _t=Object.assign||function(e){for(var t=1;t<argumen...
  function Ot (line 1) | function Ot(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function Mt (line 1) | function Mt(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function At (line 1) | function At(e,t,n){return t&&Mt(e.prototype,t),n&&Mt(e,n),e}
  function Pt (line 1) | function Pt(e,t){return!t||"object"!==kt(t)&&"function"!=typeof t?Ft(e):t}
  function Ft (line 1) | function Ft(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function zt (line 1) | function zt(e){return(zt=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function Tt (line 1) | function Tt(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function Lt (line 1) | function Lt(e,t){return(Lt=Object.setPrototypeOf||function(e,t){return e...
  function Dt (line 1) | function Dt(e){return(Dt="function"==typeof Symbol&&"symbol"==typeof Sym...
  function jt (line 1) | function jt(){return jt=Object.assign||function(e){for(var t=1;t<argumen...
  function Rt (line 1) | function Rt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function Nt (line 1) | function Nt(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function It (line 1) | function It(e,t,n){return t&&Nt(e.prototype,t),n&&Nt(e,n),e}
  function Ht (line 1) | function Ht(e,t){return!t||"object"!==Dt(t)&&"function"!=typeof t?Vt(e):t}
  function Vt (line 1) | function Vt(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function Bt (line 1) | function Bt(e){return(Bt=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function $t (line 1) | function $t(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function Wt (line 1) | function Wt(e,t){return(Wt=Object.setPrototypeOf||function(e,t){return e...
  function Ut (line 1) | function Ut(e){return(Ut="function"==typeof Symbol&&"symbol"==typeof Sym...
  function Kt (line 1) | function Kt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enum...
  function qt (line 1) | function qt(){return qt=Object.assign||function(e){for(var t=1;t<argumen...
  function Gt (line 1) | function Gt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a...
  function Yt (line 1) | function Yt(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.e...
  function Qt (line 1) | function Qt(e,t,n){return t&&Yt(e.prototype,t),n&&Yt(e,n),e}
  function Xt (line 1) | function Xt(e,t){return!t||"object"!==Ut(t)&&"function"!=typeof t?Zt(e):t}
  function Jt (line 1) | function Jt(e){return(Jt=Object.setPrototypeOf?Object.getPrototypeOf:fun...
  function Zt (line 1) | function Zt(e){if(void 0===e)throw new ReferenceError("this hasn't been ...
  function en (line 1) | function en(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("...
  function tn (line 1) | function tn(e,t){return(tn=Object.setPrototypeOf||function(e,t){return e...
  function nn (line 1) | function nn(){}
  function rn (line 1) | function rn(e){e.stopPropagation(),e.nativeEvent.stopImmediatePropagatio...
  function on (line 1) | function on(e){return e.rowSelection||{}}
  function e (line 1) | function e(t,n){dn()(this,e),this._cached={},this.columns=t||this.normal...
  function t (line 1) | function t(){var e,n,r,o;dn()(this,t);for(var i=arguments.length,a=Array...
  function t (line 1) | function t(e){dn()(this,t);var n=gn()(this,(t.__proto__||Object.getProto...
  function t (line 1) | function t(){return dn()(this,t),gn()(this,(t.__proto__||Object.getProto...
  function t (line 1) | function t(){var e,n,r,o;dn()(this,t);for(var i=arguments.length,a=Array...
  function t (line 1) | function t(){var e,n,r,o;dn()(this,t);for(var i=arguments.length,a=Array...
  function t (line 1) | function t(e){dn()(this,t);var n=gn()(this,(t.__proto__||Object.getProto...
  function t (line 1) | function t(e){dn()(this,t);var n=gn()(this,(t.__proto__||Object.getProto...
  function t (line 1) | function t(){return dn()(this,t),gn()(this,(t.__proto__||Object.getProto...
  function t (line 1) | function t(){var e;return w(this,t),e=x(this,k(t).apply(this,arguments))...
  function t (line 1) | function t(){var e;return F(this,t),e=L(this,D(t).apply(this,arguments))...
  function t (line 1) | function t(e){var n;V(this,t),n=W(this,K(t).call(this,e)),n.onRadioChang...
  function t (line 1) | function t(){var e;return J(this,t),e=te(this,re(t).apply(this,arguments...
  function t (line 1) | function t(e){var n;ye(this,t),n=Ce(this,Ee(t).call(this,e)),n.setNeverS...
  function t (line 1) | function t(e){var n;return Fe(this,t),n=Le(this,je(t).call(this,e)),n.st...
  function t (line 1) | function t(e){var n;return Ve(this,t),n=We(this,Ke(t).call(this,e)),n.ha...
  function t (line 1) | function t(){return Qe(this,t),Xe(this,Ze(t).apply(this,arguments))}
  function t (line 1) | function t(){return rt(this,t),ot(this,at(t).apply(this,arguments))}
  function t (line 1) | function t(e){dn()(this,t);var n=gn()(this,(t.__proto__||Object.getProto...
  function t (line 1) | function t(e){dn()(this,t);var n=gn()(this,(t.__proto__||Object.getProto...
  function t (line 1) | function t(){return Ot(this,t),Pt(this,zt(t).apply(this,arguments))}
  function t (line 1) | function t(){var e;return Rt(this,t),e=Ht(this,Bt(t).apply(this,argument...
  function t (line 1) | function t(e){var n;Gt(this,t),n=Xt(this,Jt(t).call(this,e)),n.getCheckb...
  function r (line 1) | function r(){return r=Object.assign||function(e){for(var t=1;t<arguments...
  function o (line 1) | function o(e){var t=e.duration,n=e.placement,r=e.bottom,o=e.top,i=e.getC...
  function i (line 1) | function i(e){var t,n=arguments.length>1&&void 0!==arguments[1]?argument...
  function a (line 1) | function a(e,t){var n=e.prefixCls,r=e.placement,o=void 0===r?v:r,a=e.get...
  function s (line 1) | function s(e){var t=e.prefixCls||"ant-notification",n="".concat(t,"-noti...
  function r (line 1) | function r(){function e(e,t){t||(t=e,e=0),e>i?i=e:e<a&&(a=e),r[e]||(r[e]...
  function t (line 1) | function t(e,t){!p&&f&&u&&0===d.size()&&a(),d.add(e,t)}
  function n (line 1) | function n(){for(p=!0;d.size();){var e=d;d=r(),e.process()}p=!1}
  function i (line 1) | function i(e){p||(void 0===e&&(e=u),h&&(s(h),h=null),e?a():n())}
  function a (line 1) | function a(){h=c(n)}
  function s (line 1) | function s(e){return clearTimeout(e)}
  function c (line 1) | function c(e){return function(e){return setTimeout(e,0)}(e)}
  function r (line 1) | function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[...
  function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
  function t (line 1) | function t(e){var n;return(0,s.default)(this,t),n=(0,l.default)(this,(0,...
  function e (line 1) | function e(e,t,n){void 0===n&&(n={}),this.execute=e,this.applicator=t,th...
  function r (line 1) | function r(e,t,n,r){if(!s(e))return e;t=i(t,e);for(var l=-1,u=t.length,f...
  function r (line 1) | function r(e){var t=e.registry.widgets.AltDateWidget;return s.default.cr...
  function n (line 1) | function n(e){var t=e&&e.constructor;return e===("function"==typeof t&&t...
  function n (line 1) | function n(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t]...
  function r (line 1) | function r(e,t,n,f,h){e!==t&&a(t,function(a,l){if(c(a))h||(h=new o),s(e,...
  function r (line 1) | function r(){return"rcNotification_"+F+"_"+P++}
  function t (line 1) | function t(){var e,n,r,o;f()(this,t);for(var i=arguments.length,a=Array(...
  function t (line 1) | function t(){var e,n,o,i;f()(this,t);for(var a=arguments.length,s=Array(...
  function n (line 1) | function n(e){c||(c=!0,t({notice:function(t){e.add(t)},removeNotice:func...
  function n (line 1) | function n(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]...
  function r (line 1) | function r(e,t){var n=i(e,t);return o(n)?n:void 0}
  function r (line 1) | function r(e,t,n,l,u,f,h,d){for(var p,m,v=u,g=0,y=!!h&&s(h,d,3);g<l;){if...
  function r (line 1) | function r(e,t,n){t=o(t,e);for(var r=-1,u=t.length,f=!1;++r<u;){var h=l(...
  function r (line 1) | function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function o (line 1) | function o(){return o=Object.assign||function(e){for(var t=1;t<arguments...
  function i (line 1) | function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function a (line 1) | function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function s (line 1) | function s(e,t,n){return t&&a(e.prototype,t),n&&a(e,n),e}
  function c (line 1) | function c(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?l(e):t}
  function l (line 1) | function l(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function u (line 1) | function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function f (line 1) | function f(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function h (line 1) | function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e._...
  function t (line 1) | function t(){return i(this,t),c(this,u(t).apply(this,arguments))}
  function t (line 1) | function t(e){var n;(0,a.default)(this,t),n=(0,c.default)(this,(0,l.defa...
  function r (line 1) | function r(e){return!(!a(e)||i(e))&&(o(e)?p:l).test(s(e))}
  function r (line 1) | function r(e){var t=e.registry.widgets.BaseInput;return a.default.create...
  function r (line 1) | function r(e){var t=e.defaultProps,n=e.defaultRules,r=e.type;return func...
  function r (line 1) | function r(e,t){var n=t?o(e.buffer):e.buffer;return new e.constructor(n,...
  function r (line 1) | function r(e,t){return e===t||e.constructor!==t.constructor&&Object.getP...
  function r (line 1) | function r(e){var t=e.id,n=e.title,r=e.required;return i.default.createE...
  function r (line 1) | function r(e){var t=this.__data__,n=o(t,e);return n<0?void 0:t[n][1]}
  function r (line 1) | function r(){var e=new v.default({errorDataPath:"property",allErrors:!0,...
  function o (line 1) | function o(e){return e.length?e.reduce(function(e,t){var n=t.property,r=...
  function i (line 1) | function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
  function a (line 1) | function a(e){var t={__errors:[],addError:function(e){this.__errors.push...
  function s (line 1) | function s(e){return Object.keys(e).reduce(function(t,n){return"addError...
  function c (line 1) | function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0...
  function l (line 1) | function l(e,t,n,l){var u=arguments.length>4&&void 0!==arguments[4]?argu...
  function u (line 1) | function u(e,t){try{return b.validate(e,t)}catch(e){return!1}}
  function r (line 1) | function r(e){return"string"==typeof e||!i(e)&&a(e)&&o(e)==s}
  function r (line 1) | function r(e,t){var n=e[1],r=t[1],m=n|r,v=m<(c|l|h),g=r==h&&n==f||r==h&&...
  function r (line 1) | function r(e,t){return!!(null==e?0:e.length)&&o(e,t,0)>-1}
  function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
  function n (line 1) | function n(e){return e&&e.__esModule?e:{default:e}}
  function r (line 1) | function r(e){var t=e.split("/").filter(function(e){return e});return t....
  function r (line 1) | function r(t){e&&e.env||console.error("[@ant-design/icons-react]: "+t+".")}
  function o (line 1) | function o(e){return"object"==typeof e&&"string"==typeof e.name&&"string...
  function i (line 1) | function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0...
  function a (line 1) | function a(e,t,n){return n?v.createElement(e.tag,u()({key:t},i(e.attrs),...
  function s (line 1) | function s(e){return Object(m.generate)(e)[0]}
  function c (line 1) | function c(e,t){switch(t){case"fill":return e+"-fill";case"outline":retu...
  function e (line 1) | function e(){h()(this,e),this.collection={}}
  function r (line 1) | function r(e,t){for(var n=i()({},e),r=0;r<t.length;r++){delete n[t[r]]}r...
  function r (line 1) | function r(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o+...
  function o (line 1) | function o(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o+...
  function i (line 1) | function i(e,t,n){for(var r=arguments.length,o=Array(r>3?r-3:0),i=3;i<r;...
  function r (line 1) | function r(e,t){return o(e)||i(e,t)||a()}
  function r (line 1) | function r(e){for(var t=e.name+"",n=o[t],r=a.call(o,t)?n.length:0;r--;){...
  function r (line 1) | function r(e,t){!o.isUndefined(e)&&o.isUndefined(e["Content-Type"])&&(e[...
  function n (line 1) | function n(){}
  function r (line 1) | function r(){this.__data__=new o,this.size=0}
  function t (line 1) | function t(){var e,n;(0,y.default)(this,t);for(var r=arguments.length,o=...
  function r (line 1) | function r(e,t,n,a){function w(){var e=H.validate,t=e.apply(this,argumen...
  function o (line 1) | function o(e,t,n){var r=a.call(this,e,t,n);return r>=0?{index:r,compilin...
  function i (line 1) | function i(e,t,n){var r=a.call(this,e,t,n);r>=0&&this._compilations.spli...
  function a (line 1) | function a(e,t,n){for(var r=0;r<this._compilations.length;r++){var o=thi...
  function s (line 1) | function s(e,t){return"var pattern"+e+" = new RegExp("+d.toQuotedString(...
  function c (line 1) | function c(e){return"var default"+e+" = defaults["+e+"];"}
  function l (line 1) | function l(e,t){return void 0===t[e]?"":"var refVal"+e+" = refVal["+e+"];"}
  function u (line 1) | function u(e){return"var customRule"+e+" = customRules["+e+"];"}
  function f (line 1) | function f(e,t){if(!e.length)return"";for(var n="",r=0;r<e.length;r++)n+...
  function r (line 1) | function r(e){var t=new e.constructor(e.byteLength);return new o(t).set(...
  function r (line 1) | function r(e,t,n){var r=e[t];return void 0!==r&&null!==r||void 0===n?r:n}
  function t (line 1) | function t(){return null!==e&&e.apply(this,arguments)||this}
  function n (line 1) | function n(e){if(Array.isArray(e))return e}
  function r (line 1) | function r(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t...
  function o (line 1) | function o(e){return r(e)===p}
  function r (line 1) | function r(e,t,n){var r,o,i,a=new Array(n),s=8*n-t-1,c=(1<<s)-1,l=c>>1,u...
  function o (line 1) | function o(e,t,n){var r,o=8*n-t-1,i=(1<<o)-1,a=i>>1,s=o-7,c=n-1,l=e[c--]...
  function i (line 1) | function i(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}
  function a (line 1) | function a(e){return[255&e]}
  function s (line 1) | function s(e){return[255&e,e>>8&255]}
  function c (line 1) | function c(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}
  function l (line 1) | function l(e){return r(e,52,8)}
  function u (line 1) | function u(e){return r(e,23,4)}
  function f (line 1) | function f(e,t,n){_(e[A],t,{get:function(){return this[n]}})}
  function h (line 1) | function h(e,t,n,r){var o=+n,i=S(o);if(i+t>e[$])throw L(P);var a=e[B]._b...
  function d (line 1) | function d(e,t,n,r,o,i){var a=+n,s=S(a);if(s+t>e[$])throw L(P);for(var c...
  function r (line 1) | function r(e){return e.default||e}
  function o (line 1) | function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function i (line 1) | function i(){return i=Object.assign||function(e){for(var t=1;t<arguments...
  function a (line 1) | function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function s (line 1) | function s(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function c (line 1) | function c(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),e}
  function l (line 1) | function l(e,t){return!t||"object"!==o(t)&&"function"!=typeof t?u(e):t}
  function u (line 1) | function u(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function f (line 1) | function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function h (line 1) | function h(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function d (line 1) | function d(e,t){return(d=Object.setPrototypeOf||function(e,t){return e._...
  function p (line 1) | function p(e){e&&e.locale?r(g).locale(e.locale):r(g).locale("en")}
  function t (line 1) | function t(e){var n;return a(this,t),n=l(this,f(t).call(this,e)),p(e.loc...
  function r (line 1) | function r(e,t){return e&&o(e,t,i)}
  function n (line 1) | function n(e,t){var n=t.length;if(!n)return e;var o=n-1;return t[o]=(n>1...
  function n (line 1) | function n(e,t){if("__proto__"!=t)return e[t]}
  function r (line 1) | function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0...
  function o (line 1) | function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function i (line 1) | function i(e,t){if(!e)throw new ReferenceError("this hasn't been initial...
  function a (line 1) | function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function s (line 1) | function s(e){return function(){for(var t=arguments.length,n=Array(t),r=...
  function c (line 1) | function c(e){return function(){return function(t){return function(n){if...
  function t (line 1) | function t(){var n,r,a;o(this,t);for(var s=arguments.length,c=Array(s),l...
  function r (line 1) | function r(e){var t=e.registry.widgets.BaseInput;return a.default.create...
  function n (line 1) | function n(e,t){for(var n=-1,r=e?e.length:0,o=Array(r);++n<r;)o[n]=t(e[n...
  function r (line 1) | function r(e,t){return null==e?void 0:e[t]}
  function o (line 1) | function o(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!...
  function i (line 1) | function i(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t...
  function a (line 1) | function a(){this.__data__=de?de(null):{}}
  function s (line 1) | function s(e){return this.has(e)&&delete this.__data__[e]}
  function c (line 1) | function c(e){var t=this.__data__;if(de){var n=t[e];return n===B?void 0:...
  function l (line 1) | function l(e){var t=this.__data__;return de?void 0!==t[e]:se.call(t,e)}
  function u (line 1) | function u(e,t){return this.__data__[e]=de&&void 0===t?B:t,this}
  function f (line 1) | function f(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t...
  function h (line 1) | function h(){this.__data__=[]}
  function d (line 1) | function d(e){var t=this.__data__,n=x(t,e);return!(n<0)&&(n==t.length-1?...
  function p (line 1) | function p(e){var t=this.__data__,n=x(t,e);return n<0?void 0:t[n][1]}
  function m (line 1) | function m(e){return x(this.__data__,e)>-1}
  function v (line 1) | function v(e,t){var n=this.__data__,r=x(n,e);return r<0?n.push([e,t]):n[...
  function g (line 1) | function g(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t...
  function y (line 1) | function y(){this.__data__={hash:new i,map:new(he||f),string:new i}}
  function b (line 1) | function b(e){return O(this,e).delete(e)}
  function w (line 1) | function w(e){return O(this,e).get(e)}
  function C (line 1) | function C(e){return O(this,e).has(e)}
  function E (line 1) | function E(e,t){return O(this,e).set(e,t),this}
  function x (line 1) | function x(e,t){for(var n=e.length;n--;)if(L(e[n][0],t))return n;return-1}
  function S (line 1) | function S(e){return!(!j(e)||P(e))&&(D(e)||o(e)?le:X).test(z(e))}
  function k (line 1) | function k(e){if("string"==typeof e)return e;if(N(e))return me?me.call(e...
  function _ (line 1) | function _(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n]...
  function O (line 1) | function O(e,t){var n=e.__data__;return A(t)?n["string"==typeof t?"strin...
  function M (line 1) | function M(e,t){var n=r(e,t);return S(n)?n:void 0}
  function A (line 1) | function A(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t...
  function P (line 1) | function P(e){return!!ie&&ie in e}
  function F (line 1) | function F(e){if("string"==typeof e||N(e))return e;var t=e+"";return"0"=...
  function z (line 1) | function z(e){if(null!=e){try{return ae.call(e)}catch(e){}try{return e+"...
  function T (line 1) | function T(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw n...
  function L (line 1) | function L(e,t){return e===t||e!==e&&t!==t}
  function D (line 1) | function D(e){var t=j(e)?ce.call(e):"";return t==W||t==U}
  function j (line 1) | function j(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}
  function R (line 1) | function R(e){return!!e&&"object"==typeof e}
  function N (line 1) | function N(e){return"symbol"==typeof e||R(e)&&ce.call(e)==K}
  function I (line 1) | function I(e){return null==e?"":k(e)}
  function H (line 1) | function H(e){return ge(e)?n(e,F):N(e)?[e]:_(ve(e))}
  function r (line 1) | function r(e,t,n){function r(){return(this&&this!==i&&this instanceof r?...
  function r (line 1) | function r(e,t){for(var n=window.getComputedStyle(e,null),r="",o=0;o<d.l...
  function o (line 1) | function o(e){if(f){var t=parseFloat(r(e,"transition-delay"))||0,n=parse...
  function i (line 1) | function i(e){e.rcEndAnimTimeout&&(clearTimeout(e.rcEndAnimTimeout),e.rc...
  function a (line 1) | function a(e,t){return e.test(t)}
  function s (line 1) | function s(e){var t=e||("undefined"!=typeof navigator?navigator.userAgen...
  function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
  function o (line 1) | function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function i (line 1) | function i(e,t){if(!e)throw new ReferenceError("this hasn't been initial...
  function a (line 1) | function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function e (line 1) | function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function t (line 1) | function t(e){o(this,t);var n=i(this,(t.__proto__||Object.getPrototypeOf...
  function t (line 1) | function t(){var e,n;(0,m.default)(this,t);for(var r=arguments.length,o=...
  function r (line 1) | function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0...
  function o (line 1) | function o(e,t){return arguments.length>1?((0,C.check)(e,C.is.notUndef,"...
  function i (line 1) | function i(e){return I(k,e)}
  function a (line 1) | function a(e){return I(_,e)}
  function s (line 1) | function s(e,t,n){(0,C.check)(t,C.is.notUndef,e+": argument fn is undefi...
  function c (line 1) | function c(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)...
  function l (line 1) | function l(e,t){var n=arguments.length>2&&void 0!==arguments[2]?argument...
  function u (line 1) | function u(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)...
  function f (line 1) | function f(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)...
  function h (line 1) | function h(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)...
  function d (line 1) | function d(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=argu...
  function p (line 1) | function p(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=argu...
  function m (line 1) | function m(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)...
  function v (line 1) | function v(e,t){return(0,C.check)(e,C.is.notUndef,"actionChannel(pattern...
  function g (line 1) | function g(){return I(L,{})}
  function y (line 1) | function y(e){return(0,C.check)(e,C.is.channel,"flush(channel): argument...
  function b (line 1) | function b(e){return(0,C.check)(e,C.is.string,"getContext(prop): argumen...
  function w (line 1) | function w(e){return(0,C.check)(e,C.is.object,(0,C.createSetContextWarni...
  function r (line 1) | function r(e,t,n){function r(){for(var i=arguments.length,h=Array(i),d=i...
  function n (line 1) | function n(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}
  function r (line 1) | function r(e,t,n){(void 0===n||i(e[t],n))&&(void 0!==n||t in e)||o(e,t,n)}
  function r (line 1) | function r(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"fun...
  function r (line 1) | function r(e,t,n){function r(t){var n=y,r=b;return y=b=void 0,S=t,C=e.ap...
  function t (line 1) | function t(){return(0,o.default)(this,t),(0,a.default)(this,(0,s.default...
  function r (line 1) | function r(){return r=Object.assign||function(e){for(var t=1;t<arguments...
  function o (line 1) | function o(e){return"boolean"==typeof e?e?$:W:r({},W,e)}
  function i (line 1) | function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0...
  function a (line 1) | function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function s (line 1) | function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enume...
  function c (line 1) | function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function l (line 1) | function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function u (line 1) | function u(e,t,n){return t&&l(e.prototype,t),n&&l(e,n),e}
  function f (line 1) | function f(e,t){return!t||"object"!==a(t)&&"function"!=typeof t?d(e):t}
  function h (line 1) | function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function d (line 1) | function d(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function p (line 1) | function p(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function m (line 1) | function m(e,t){return(m=Object.setPrototypeOf||function(e,t){return e._...
  function v (line 1) | function v(){return v=Object.assign||function(e){for(var t=1;t<arguments...
  function t (line 1) | function t(){return k()(this,t),O()(this,e.apply(this,arguments))}
  function t (line 1) | function t(){var n,r,o;k()(this,t);for(var i=arguments.length,a=Array(i)...
  function t (line 1) | function t(e){var n;return c(this,t),n=f(this,h(t).call(this,e)),n.onVis...
  function r (line 1) | function r(e){o.copy(e,this)}
  function t (line 1) | function t(){}
  function r (line 1) | function r(e){return e&&e.__esModule?e:{default:e}}
  function o (line 1) | function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbo...
  function i (line 1) | function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a ...
  function a (line 1) | function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.en...
  function s (line 1) | function s(e,t,n){return t&&a(e.prototype,t),n&&a(e,n),e}
  function c (line 1) | function c(e,t){return!t||"object"!==o(t)&&"function"!=typeof t?u(e):t}
  function l (line 1) | function l(e){return(l=Object.setPrototypeOf?Object.getPrototypeOf:funct...
  function u (line 1) | function u(e){if(void 0===e)throw new ReferenceError("this hasn't been i...
  function f (line 1) | function f(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("S...
  function h (line 1) | function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e._...
  function t (line 1) | function t(e){var n;return i(this,t),n=c(this,l(t).call(this,e)),n.state...
  function n (line 1) | function n(e){return!!e&&"object"==typeof e}
  function r (line 1) | function r(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=m}
  function o (line 1) | function o(e){return i(e)&&h.call(e)==s}
  function i (line 1) | function i(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}
  function a (line 1) | function a(e){return null!=e&&(o(e)?d.test(u.call(e)):n(e)&&c.test(e))}
  function r (line 1) | function r(e){return e}
  function o (line 1) | function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[...
  function i (line 1) | function i(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=...
  function a (line 1) | function a(e,t){var n=(0,l.default)(e).map(function(t){return o(t,e[t])}...
  function t (line 1) | function t(){return Fr.apply(null,arguments)}
  function n (line 1) | function n(e){return e instanceof Array||"[object Array]"===Object.proto...
  function r (line 1) | function r(e){return null!=e&&"[object Object]"===Object.prototype.toStr...
  function o (line 1) | function o(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnProp...
  function i (line 1) | function i(e){return void 0===e}
  function a (line 1) | function a(e){return"number"==typeof e||"[object Number]"===Object.proto...
  function s (line 1) | function s(e){return e instanceof Date||"[object Date]"===Object.prototy...
  function c (line 1) | function c(e,t){var n,r=[];for(n=0;n<e.length;++n)r.push(t(e[n],n));retu...
  function l (line 1) | function l(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
  function u (line 1) | function u(e,t){for(var n in t)l(t,n)&&(e[n]=t[n]);return l(t,"toString"...
  function f (line 1) | function f(e,t,n,r){return kt(e,t,n,r,!0).utc()}
  function h (line 1) | function h(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,...
  function d (line 1) | function d(e){return null==e._pf&&(e._pf=h()),e._pf}
  function p (line 1) | function p(e){if(null==e._isValid){var t=d(e),n=zr.call(t.parsedDatePart...
  function m (line 1) | function m(e){var t=f(NaN);return null!=e?u(d(t),e):d(t).userInvalidated...
  function v (line 1) | function v(e,t){var n,r,o;if(i(t._isAMomentObject)||(e._isAMomentObject=...
  function g (line 1) | function g(e){v(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),...
  function y (line 1) | function y(e){return e instanceof g||null!=e&&null!=e._isAMomentObject}
  function b (line 1) | function b(e){return e<0?Math.ceil(e)||0:Math.floor(e)}
  function w (line 1) | function w(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=b(t)),n}
  function C (line 1) | function C(e,t,n){var r,o=Math.min(e.length,t.length),i=Math.abs(e.lengt...
  function E (line 1) | function E(e){!1===t.suppressDeprecationWarnings&&"undefined"!=typeof co...
  function x (line 1) | function x(e,n){var r=!0;return u(function(){if(null!=t.deprecationHandl...
  function S (line 1) | function S(e,n){null!=t.deprecationHandler&&t.deprecationHandler(e,n),Dr...
  function k (line 1) | function k(e){return e instanceof Function||"[object Function]"===Object...
  function _ (line 1) | function _(e){var t,n;for(n in e)t=e[n],k(t)?this[n]=t:this["_"+n]=t;thi...
  function O (line 1) | function O(e,t){var n,o=u({},e);for(n in t)l(t,n)&&(r(e[n])&&r(t[n])?(o[...
  function M (line 1) | function M(e){null!=e&&this.set(e)}
  function A (line 1) | function A(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;retur...
  function P (line 1) | function P(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toU...
  function F (line 1) | function F(){return this._invalidDate}
  function z (line 1) | function z(e){return this._ordinal.replace("%d",e)}
  function T (line 1) | function T(e,t,n,r){var o=this._relativeTime[n];return k(o)?o(e,t,n,r):o...
  function L (line 1) | function L(e,t){var n=this._relativeTime[e>0?"future":"past"];return k(n...
  function D (line 1) | function D(e,t){var n=e.toLowerCase();Vr[n]=Vr[n+"s"]=Vr[t]=e}
  function j (line 1) | function j(e){return"string"==typeof e?Vr[e]||Vr[e.toLowerCase()]:void 0}
  function R (line 1) | function R(e){var t,n,r={};for(n in e)l(e,n)&&(t=j(n))&&(r[t]=e[n]);retu...
  function N (line 1) | function N(e,t){Br[e]=t}
  function I (line 1) | function I(e){var t=[];for(var n in e)t.push({unit:n,priority:Br[n]});re...
  function H (line 1) | function H(e,t,n){var r=""+Math.abs(e),o=t-r.length;return(e>=0?n?"+":""...
  function V (line 1) | function V(e,t,n,r){var o=r;"string"==typeof r&&(o=function(){return thi...
  function B (line 1) | function B(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.repl...
  function $ (line 1) | function $(e){var t,n,r=e.match($r);for(t=0,n=r.length;t<n;t++)Kr[r[t]]?...
  function W (line 1) | function W(e,t){return e.isValid()?(t=U(t,e.localeData()),Ur[t]=Ur[t]||$...
  function U (line 1) | function U(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(...
  function K (line 1) | function K(e,t,n){uo[e]=k(t)?t:function(e,r){return e&&n?n:t}}
  function q (line 1) | function q(e,t){return l(uo,e)?uo[e](t._strict,t._locale):new RegExp(G(e))}
  function G (line 1) | function G(e){return Y(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]...
  function Y (line 1) | function Y(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}
  function Q (line 1) | function Q(e,t){var n,r=t;for("string"==typeof e&&(e=[e]),a(t)&&(r=funct...
  function X (line 1) | function X(e,t){Q(e,function(e,n,r,o){r._w=r._w||{},t(e,r._w,r,o)})}
  function J (line 1) | function J(e,t,n){null!=t&&l(fo,e)&&fo[e](t,n._a,n,e)}
  function Z (line 1) | function Z(e){return ee(e)?366:365}
  function ee (line 1) | function ee(e){return e%4==0&&e%100!=0||e%400==0}
  function te (line 1) | function te(){return ee(this.year())}
  function ne (line 1) | function ne(e,n){return function(r){return null!=r?(oe(this,e,r),t.updat...
  function re (line 1) | function re(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():...
  function oe (line 1) | function oe(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&ee(e.year())...
  function ie (line 1) | function ie(e){return e=j(e),k(this[e])?this[e]():this}
  function ae (line 1) | function ae(e,t){if("object"==typeof e){e=R(e);for(var n=I(e),r=0;r<n.le...
  function se (line 1) | function se(e,t){return(e%t+t)%t}
  function ce (line 1) | function ce(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=se(t,12);return ...
  function le (line 1) | function le(e,t){return e?n(this._months)?this._months[e.month()]:this._...
  function ue (line 1) | function ue(e,t){return e?n(this._monthsShort)?this._monthsShort[e.month...
  function fe (line 1) | function fe(e,t,n){var r,o,i,a=e.toLocaleLowerCase();if(!this._monthsPar...
  function he (line 1) | function he(e,t,n){var r,o,i;if(this._monthsParseExact)return fe.call(th...
  function de (line 1) | function de(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if...
  function pe (line 1) | function pe(e){return null!=e?(de(this,e),t.updateOffset(this,!0),this):...
  function me (line 1) | function me(){return ce(this.year(),this.month())}
  function ve (line 1) | function ve(e){return this._monthsParseExact?(l(this,"_monthsRegex")||ye...
  function ge (line 1) | function ge(e){return this._monthsParseExact?(l(this,"_monthsRegex")||ye...
  function ye (line 1) | function ye(){function e(e,t){return t.length-e.length}var t,n,r=[],o=[]...
  function be (line 1) | function be(e,t,n,r,o,i,a){var s;return e<100&&e>=0?(s=new Date(e+400,t,...
  function we (line 1) | function we(e){var t;if(e<100&&e>=0){var n=Array.prototype.slice.call(ar...
  function Ce (line 1) | function Ce(e,t,n){var r=7+t-n;return-(7+we(e,0,r).getUTCDay()-t)%7+r-1}
  function Ee (line 1) | function Ee(e,t,n,r,o){var i,a,s=(7+n-r)%7,c=Ce(e,r,o),l=1+7*(t-1)+s+c;r...
  function xe (line 1) | function xe(e,t,n){var r,o,i=Ce(e.year(),t,n),a=Math.floor((e.dayOfYear(...
  function Se (line 1) | function Se(e,t,n){var r=Ce(e,t,n),o=Ce(e+1,t,n);return(Z(e)-r+o)/7}
  function ke (line 1) | function ke(e){return xe(e,this._week.dow,this._week.doy).week}
  function _e (line 1) | function _e(){return this._week.dow}
  function Oe (line 1) | function Oe(){return this._week.doy}
  function Me (line 1) | function Me(e){var t=this.localeData().week(this);return null==e?t:this....
  function Ae (line 1) | function Ae(e){var t=xe(this,1,4).week;return null==e?t:this.add(7*(e-t)...
  function Pe (line 1) | function Pe(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(...
  function Fe (line 1) | function Fe(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(...
  function ze (line 1) | function ze(e,t){return e.slice(t,7).concat(e.slice(0,t))}
  function Te (line 1) | function Te(e,t){var r=n(this._weekdays)?this._weekdays:this._weekdays[e...
  function Le (line 1) | function Le(e){return!0===e?ze(this._weekdaysShort,this._week.dow):e?thi...
  function De (line 1) | function De(e){return!0===e?ze(this._weekdaysMin,this._week.dow):e?this....
  function je (line 1) | function je(e,t,n){var r,o,i,a=e.toLocaleLowerCase();if(!this._weekdaysP...
  function Re (line 1) | function Re(e,t,n){var r,o,i;if(this._weekdaysParseExact)return je.call(...
  function Ne (line 1) | function Ne(e){if(!this.isValid())return null!=e?this:NaN;var t=this._is...
  function Ie (line 1) | function Ie(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.da...
  function He (line 1) | function He(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){va...
  function Ve (line 1) | function Ve(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")...
  function Be (line 1) | function Be(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")...
  function $e (line 1) | function $e(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")...
  function We (line 1) | function We(){function e(e,t){return t.length-e.length}var t,n,r,o,i,a=[...
  function Ue (line 1) | function Ue(){return this.hours()%12||12}
  function Ke (line 1) | function Ke(){return this.hours()||24}
  function qe (line 1) | function qe(e,t){V(e,0,0,function(){return this.localeData().meridiem(th...
  function Ge (line 1) | function Ge(e,t){return t._meridiemParse}
  function Ye (line 1) | function Ye(e){return"p"===(e+"").toLowerCase().charAt(0)}
  function Qe (line 1) | function Qe(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}
  function Xe (line 1) | function Xe(e){return e?e.toLowerCase().replace("_","-"):e}
  function Je (line 1) | function Je(e){for(var t,n,r,o,i=0;i<e.length;){for(o=Xe(e[i]).split("-"...
  function Ze (line 1) | function Ze(t){var n=null;if(!Ho[t]&&void 0!==e&&e&&e.exports)try{n=jo._...
  function et (line 1) | function et(e,t){var n;return e&&(n=i(t)?rt(e):tt(e,t),n?jo=n:"undefined...
  function tt (line 1) | function tt(e,t){if(null!==t){var n,r=Io;if(t.abbr=e,null!=Ho[e])S("defi...
  function nt (line 1) | function nt(e,t){if(null!=t){var n,r,o=Io;r=Ze(e),null!=r&&(o=r._config)...
  function rt (line 1) | function rt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abb...
  function ot (line 1) | function ot(){return jr(Ho)}
  function it (line 1) | function it(e){var t,n=e._a;return n&&-2===d(e).overflow&&(t=n[po]<0||n[...
  function at (line 1) | function at(e,t,n){return null!=e?e:null!=t?t:n}
  function st (line 1) | function st(e){var n=new Date(t.now());return e._useUTC?[n.getUTCFullYea...
  function ct (line 1) | function ct(e){var t,n,r,o,i,a=[];if(!e._d){for(r=st(e),e._w&&null==e._a...
  function lt (line 1) | function lt(e){var t,n,r,o,i,a,s,c;if(t=e._w,null!=t.GG||null!=t.W||null...
  function ut (line 1) | function ut(e){var t,n,r,o,i,a,s=e._i,c=Bo.exec(s)||$o.exec(s);if(c){for...
  function ft (line 1) | function ft(e,t,n,r,o,i){var a=[ht(e),_o.indexOf(t),parseInt(n,10),parse...
  function ht (line 1) | function ht(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}
  function dt (line 1) | function dt(e){return e.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+...
  function pt (line 1) | function pt(e,t,n){if(e){if(Fo.indexOf(e)!==new Date(t[0],t[1],t[2]).get...
  function mt (line 1) | function mt(e,t,n){if(e)return Yo[e];if(t)return 0;var r=parseInt(n,10),...
  function vt (line 1) | function vt(e){var t=Go.exec(dt(e._i));if(t){var n=ft(t[4],t[3],t[2],t[5...
  function gt (line 1) | function gt(e){var n=qo.exec(e._i);if(null!==n)return void(e._d=new Date...
  function yt (line 1) | function yt(e){if(e._f===t.ISO_8601)return void ut(e);if(e._f===t.RFC_28...
  function bt (line 1) | function bt(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridie...
  function wt (line 1) | function wt(e){var t,n,r,o,i;if(0===e._f.length)return d(e).invalidForma...
  function Ct (line 1) | function Ct(e){if(!e._d){var t=R(e._i);e._a=c([t.year,t.month,t.day||t.d...
  function Et (line 1) | function Et(e){var t=new g(it(xt(e)));return t._nextDay&&(t.add(1,"d"),t...
  function xt (line 1) | function xt(e){var t=e._i,r=e._f;return e._locale=e._locale||rt(e._l),nu...
  function St (line 1) | function St(e){var o=e._i;i(o)?e._d=new Date(t.now()):s(o)?e._d=new Date...
  function kt (line 1) | function kt(e,t,i,a,s){var c={};return!0!==i&&!1!==i||(a=i,i=void 0),(r(...
  function _t (line 1) | function _t(e,t,n,r){return kt(e,t,n,r,!1)}
  function Ot (line 1) | function Ot(e
Condensed preview — 330 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,076K chars).
[
  {
    "path": ".babelrc.js",
    "chars": 326,
    "preview": "const path = require('path');\n\nmodule.exports = {\n  plugins: [\n    [\n      'module-resolver',\n      {\n        alias: {\n "
  },
  {
    "path": ".config.js",
    "chars": 1188,
    "preview": "module.exports = {\n  jwtSecret: 'winwinfe', // jwt加密key\n  dmsUploadAPI: 'http://127.0.0.1:7100/api', // dms上传服务访问地址,项目地址"
  },
  {
    "path": ".gitignore",
    "chars": 90,
    "preview": "node_modules\n.idea\nlogs\nyarn-*.log\n.DS_Store\nCODE_OF_CONDUCT.md\nopt/\nrun/\ndist/\nconfig.js\n"
  },
  {
    "path": ".webpackrc.js",
    "chars": 705,
    "preview": "const path = require('path');\n\nexport default {\n  entry: 'app/assets/index.js',\n  extraBabelPlugins: [['import', { libra"
  },
  {
    "path": "LICENSE",
    "chars": 1076,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2019 gavin1995\n\nPermission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "README.md",
    "chars": 10223,
    "preview": "DMS正在进行发布以来最大的一次更新,敬请期待...  - Gavin 2021.10.18\n\n<img src=\"https://github.com/gavin1995/dms/blob/master/app/assets/assets"
  },
  {
    "path": "app/assets/common/menu.js",
    "chars": 872,
    "preview": "import { isUrl } from '../utils/utils';\n\nconst menuData = [\n  {\n    name: '开发配置',\n    icon: 'dashboard',\n    path: 'deve"
  },
  {
    "path": "app/assets/common/router.js",
    "chars": 5236,
    "preview": "import { createElement } from 'react';\nimport dynamic from 'dva/dynamic';\nimport pathToRegexp from 'path-to-regexp';\nimp"
  },
  {
    "path": "app/assets/components/ActiveChart/index.js",
    "chars": 1974,
    "preview": "import React, { Component } from 'react';\n\nimport { MiniArea } from '../Charts';\nimport NumberInfo from '../NumberInfo';"
  },
  {
    "path": "app/assets/components/ActiveChart/index.less",
    "chars": 461,
    "preview": ".activeChart {\n  position: relative;\n}\n.activeChartGrid {\n  p {\n    position: absolute;\n    top: 80px;\n  }\n  p:last-chil"
  },
  {
    "path": "app/assets/components/Authorized/Authorized.js",
    "chars": 376,
    "preview": "import React from 'react';\nimport CheckPermissions from './CheckPermissions';\n\nclass Authorized extends React.Component "
  },
  {
    "path": "app/assets/components/Authorized/AuthorizedRoute.js",
    "chars": 605,
    "preview": "import React from 'react';\nimport { Route, Redirect } from 'react-router-dom';\nimport Authorized from './Authorized';\n\nc"
  },
  {
    "path": "app/assets/components/Authorized/CheckPermissions.js",
    "chars": 1654,
    "preview": "import React from 'react';\nimport PromiseRender from './PromiseRender';\nimport { CURRENT } from './index';\n\nfunction isP"
  },
  {
    "path": "app/assets/components/Authorized/CheckPermissions.test.js",
    "chars": 1611,
    "preview": "import { checkPermissions } from './CheckPermissions.js';\n\nconst target = 'ok';\nconst error = 'error';\n\ndescribe('test C"
  },
  {
    "path": "app/assets/components/Authorized/PromiseRender.js",
    "chars": 1447,
    "preview": "import React from 'react';\nimport { Spin } from 'antd';\n\nexport default class PromiseRender extends React.PureComponent "
  },
  {
    "path": "app/assets/components/Authorized/Secured.js",
    "chars": 1757,
    "preview": "import React from 'react';\nimport Exception from '../Exception/index';\nimport CheckPermissions from './CheckPermissions'"
  },
  {
    "path": "app/assets/components/Authorized/demo/AuthorizedArray.md",
    "chars": 522,
    "preview": "---\norder: 1\ntitle: \n  zh-CN: 使用数组作为参数\n  en-US: Use Array as a parameter\n---\n\nUse Array as a parameter\n\n```jsx\nimport Re"
  },
  {
    "path": "app/assets/components/Authorized/demo/AuthorizedFunction.md",
    "chars": 601,
    "preview": "---\norder: 2\ntitle: \n  zh-CN: 使用方法作为参数\n  en-US: Use function as a parameter\n---\n\nUse Function as a parameter\n\n```jsx\nimp"
  },
  {
    "path": "app/assets/components/Authorized/demo/basic.md",
    "chars": 479,
    "preview": "---\norder: 0\ntitle: \n  zh-CN: 基本使用\n  en-US: Basic use\n---\n\nBasic use\n\n```jsx\nimport RenderAuthorized from 'ant-design-pr"
  },
  {
    "path": "app/assets/components/Authorized/demo/secured.md",
    "chars": 465,
    "preview": "---\norder: 3\ntitle: \n  zh-CN: 注解基本使用\n  en-US: Basic use secured\n---\n\nsecured demo used\n\n```jsx\nimport RenderAuthorized f"
  },
  {
    "path": "app/assets/components/Authorized/index.d.ts",
    "chars": 1151,
    "preview": "import * as React from 'react';\nimport { RouteProps } from 'react-router';\n\ntype authorityFN = (currentAuthority?: strin"
  },
  {
    "path": "app/assets/components/Authorized/index.js",
    "chars": 813,
    "preview": "import Authorized from './Authorized';\nimport AuthorizedRoute from './AuthorizedRoute';\nimport Secured from './Secured';"
  },
  {
    "path": "app/assets/components/Authorized/index.md",
    "chars": 1981,
    "preview": "---\ntitle:\n  en-US: Authorized\n  zh-CN: Authorized\nsubtitle: 权限\ncols: 1\norder: 15\n---\n\n权限组件,通过比对现有权限与准入权限,决定相关元素的展示。\n\n##"
  },
  {
    "path": "app/assets/components/AvatarList/AvatarItem.d.ts",
    "chars": 265,
    "preview": "import * as React from 'react';\nexport interface IAvatarItemProps {\n  tips: React.ReactNode;\n  src: string;\n  style?: Re"
  },
  {
    "path": "app/assets/components/AvatarList/demo/simple.md",
    "chars": 556,
    "preview": "---\norder: 0\ntitle: \n  zh-CN: 基础样例 \n  en-US: Basic Usage\n---\n\nSimplest of usage.\n\n````jsx\nimport AvatarList from 'ant-de"
  },
  {
    "path": "app/assets/components/AvatarList/index.d.ts",
    "chars": 399,
    "preview": "import * as React from 'react';\nimport AvatarItem from './AvatarItem';\n\nexport interface IAvatarListProps {\n  size?: 'la"
  },
  {
    "path": "app/assets/components/AvatarList/index.en-US.md",
    "chars": 793,
    "preview": "---\ntitle: AvatarList\norder: 1\ncols: 1\n---\n\nA list of user's avatar for project or group member list frequently. If a la"
  },
  {
    "path": "app/assets/components/AvatarList/index.js",
    "chars": 1019,
    "preview": "import React from 'react';\nimport { Tooltip, Avatar } from 'antd';\nimport classNames from 'classnames';\n\nimport styles f"
  },
  {
    "path": "app/assets/components/AvatarList/index.less",
    "chars": 693,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.avatarList {\n  display: inline-block;\n  ul {\n    display: inline-block;"
  },
  {
    "path": "app/assets/components/AvatarList/index.zh-CN.md",
    "chars": 591,
    "preview": "---\ntitle: AvatarList\nsubtitle: 用户头像列表\norder: 1\ncols: 1\n---\n\n一组用户头像,常用在项目/团队成员列表。可通过设置 `size` 属性来指定头像大小。\n\n## API\n\n### Av"
  },
  {
    "path": "app/assets/components/Charts/Bar/index.d.ts",
    "chars": 346,
    "preview": "import * as React from 'react';\nexport interface IBarProps {\n  title: React.ReactNode;\n  color?: string;\n  padding?: [nu"
  },
  {
    "path": "app/assets/components/Charts/Bar/index.js",
    "chars": 2462,
    "preview": "import React, { Component } from 'react';\nimport { Chart, Axis, Tooltip, Geom } from 'bizcharts';\nimport Debounce from '"
  },
  {
    "path": "app/assets/components/Charts/ChartCard/index.d.ts",
    "chars": 388,
    "preview": "import * as React from 'react';\nexport interface IChartCardProps {\n  title: React.ReactNode;\n  action?: React.ReactNode;"
  },
  {
    "path": "app/assets/components/Charts/ChartCard/index.js",
    "chars": 1792,
    "preview": "import React from 'react';\nimport { Card, Spin } from 'antd';\nimport classNames from 'classnames';\n\nimport styles from '"
  },
  {
    "path": "app/assets/components/Charts/ChartCard/index.less",
    "chars": 1327,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.chartCard {\n  position: relative;\n  .chartTop {\n    position: relative;"
  },
  {
    "path": "app/assets/components/Charts/Field/index.d.ts",
    "chars": 221,
    "preview": "import * as React from 'react';\nexport interface IFieldProps {\n  label: React.ReactNode;\n  value: React.ReactNode;\n  sty"
  },
  {
    "path": "app/assets/components/Charts/Field/index.js",
    "chars": 239,
    "preview": "import React from 'react';\n\nimport styles from './index.less';\n\nconst Field = ({ label, value, ...rest }) => (\n  <div cl"
  },
  {
    "path": "app/assets/components/Charts/Field/index.less",
    "chars": 283,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.field {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ell"
  },
  {
    "path": "app/assets/components/Charts/Gauge/index.d.ts",
    "chars": 270,
    "preview": "import * as React from 'react';\nexport interface IGaugeProps {\n  title: React.ReactNode;\n  color?: string;\n  height: num"
  },
  {
    "path": "app/assets/components/Charts/Gauge/index.js",
    "chars": 3917,
    "preview": "import React from 'react';\nimport { Chart, Geom, Axis, Coord, Guide, Shape } from 'bizcharts';\nimport autoHeight from '."
  },
  {
    "path": "app/assets/components/Charts/MiniArea/index.d.ts",
    "chars": 475,
    "preview": "import * as React from 'react';\n\n// g2已经更新到3.0\n// 不带的写了\n\nexport interface IAxis {\n  title: any;\n  line: any;\n  gridAlign"
  },
  {
    "path": "app/assets/components/Charts/MiniArea/index.js",
    "chars": 2474,
    "preview": "import React from 'react';\nimport { Chart, Axis, Tooltip, Geom } from 'bizcharts';\nimport autoHeight from '../autoHeight"
  },
  {
    "path": "app/assets/components/Charts/MiniBar/index.d.ts",
    "chars": 272,
    "preview": "import * as React from 'react';\nexport interface IMiniBarProps {\n  color?: string;\n  height: number;\n  data: Array<{\n   "
  },
  {
    "path": "app/assets/components/Charts/MiniBar/index.js",
    "chars": 1138,
    "preview": "import React from 'react';\nimport { Chart, Tooltip, Geom } from 'bizcharts';\nimport autoHeight from '../autoHeight';\nimp"
  },
  {
    "path": "app/assets/components/Charts/MiniProgress/index.d.ts",
    "chars": 270,
    "preview": "import * as React from 'react';\nexport interface IMiniProgressProps {\n  target: number;\n  color?: string;\n  strokeWidth?"
  },
  {
    "path": "app/assets/components/Charts/MiniProgress/index.js",
    "chars": 808,
    "preview": "import React from 'react';\nimport { Tooltip } from 'antd';\n\nimport styles from './index.less';\n\nconst MiniProgress = ({ "
  },
  {
    "path": "app/assets/components/Charts/MiniProgress/index.less",
    "chars": 662,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.miniProgress {\n  padding: 5px 0;\n  position: relative;\n  width: 100%;\n "
  },
  {
    "path": "app/assets/components/Charts/Pie/index.d.ts",
    "chars": 550,
    "preview": "import * as React from 'react';\nexport interface IPieProps {\n  animate?: boolean;\n  color?: string;\n  height: number;\n  "
  },
  {
    "path": "app/assets/components/Charts/Pie/index.js",
    "chars": 6423,
    "preview": "import React, { Component } from 'react';\nimport { Chart, Tooltip, Geom, Coord } from 'bizcharts';\nimport { DataView } f"
  },
  {
    "path": "app/assets/components/Charts/Pie/index.less",
    "chars": 1649,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.pie {\n  position: relative;\n  .chart {\n    position: relative;\n  }\n  &."
  },
  {
    "path": "app/assets/components/Charts/Radar/index.d.ts",
    "chars": 361,
    "preview": "import * as React from 'react';\nexport interface IRadarProps {\n  title?: React.ReactNode;\n  height: number;\n  padding?: "
  },
  {
    "path": "app/assets/components/Charts/Radar/index.js",
    "chars": 4196,
    "preview": "import React, { Component } from 'react';\nimport { Chart, Tooltip, Geom, Coord, Axis } from 'bizcharts';\nimport { Row, C"
  },
  {
    "path": "app/assets/components/Charts/Radar/index.less",
    "chars": 915,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.radar {\n  .legend {\n    margin-top: 16px;\n    .legendItem {\n      posit"
  },
  {
    "path": "app/assets/components/Charts/TagCloud/index.d.ts",
    "chars": 255,
    "preview": "import * as React from 'react';\nexport interface ITagCloudProps {\n  data: Array<{\n    name: string;\n    value: number;\n "
  },
  {
    "path": "app/assets/components/Charts/TagCloud/index.js",
    "chars": 3851,
    "preview": "import React, { Component } from 'react';\nimport { Chart, Geom, Coord, Shape } from 'bizcharts';\nimport DataSet from '@a"
  },
  {
    "path": "app/assets/components/Charts/TagCloud/index.less",
    "chars": 104,
    "preview": ".tagCloud {\n  overflow: hidden;\n  canvas {\n    transform: scale(0.25);\n    transform-origin: 0 0;\n  }\n}\n"
  },
  {
    "path": "app/assets/components/Charts/TimelineChart/index.d.ts",
    "chars": 367,
    "preview": "import * as React from 'react';\nexport interface ITimelineChartProps {\n  data: Array<{\n    x: string;\n    y1: string;\n  "
  },
  {
    "path": "app/assets/components/Charts/TimelineChart/index.js",
    "chars": 2909,
    "preview": "import React from 'react';\nimport { Chart, Tooltip, Geom, Legend, Axis } from 'bizcharts';\nimport DataSet from '@antv/da"
  },
  {
    "path": "app/assets/components/Charts/TimelineChart/index.less",
    "chars": 39,
    "preview": ".timelineChart {\n  background: #fff;\n}\n"
  },
  {
    "path": "app/assets/components/Charts/WaterWave/index.d.ts",
    "chars": 262,
    "preview": "import * as React from 'react';\nexport interface IWaterWaveProps {\n  title: React.ReactNode;\n  color?: string;\n  height:"
  },
  {
    "path": "app/assets/components/Charts/WaterWave/index.js",
    "chars": 5201,
    "preview": "import React, { PureComponent } from 'react';\nimport autoHeight from '../autoHeight';\nimport styles from './index.less';"
  },
  {
    "path": "app/assets/components/Charts/WaterWave/index.less",
    "chars": 522,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.waterWave {\n  display: inline-block;\n  position: relative;\n  transform-"
  },
  {
    "path": "app/assets/components/Charts/autoHeight.js",
    "chars": 1306,
    "preview": "/* eslint eqeqeq: 0 */\nimport React from 'react';\n\nfunction computeHeight(node) {\n  const totalHeight = parseInt(getComp"
  },
  {
    "path": "app/assets/components/Charts/demo/bar.md",
    "chars": 397,
    "preview": "---\norder: 4\ntitle: 柱状图\n---\n\n通过设置 `x`,`y` 属性,可以快速的构建出一个漂亮的柱状图,各种纬度的关系则是通过自定义的数据展现。\n\n````jsx\nimport { Bar } from 'ant-des"
  },
  {
    "path": "app/assets/components/Charts/demo/chart-card.md",
    "chars": 2341,
    "preview": "---\norder: 1\ntitle: 图表卡片\n---\n\n用于展示图表的卡片容器,可以方便的配合其它图表套件展示丰富信息。\n\n```jsx\nimport { ChartCard, yuan, Field } from 'ant-desig"
  },
  {
    "path": "app/assets/components/Charts/demo/gauge.md",
    "chars": 230,
    "preview": "---\norder: 7\ntitle: 仪表盘 \n---\n\n仪表盘是一种进度展示方式,可以更直观的展示当前的进展情况,通常也可表示占比。\n\n````jsx\nimport { Gauge } from 'ant-design-pro/lib/"
  },
  {
    "path": "app/assets/components/Charts/demo/mini-area.md",
    "chars": 501,
    "preview": "---\norder: 2\ncol: 2\ntitle: 迷你区域图\n---\n\n````jsx\nimport { MiniArea } from 'ant-design-pro/lib/Charts';\nimport moment from '"
  },
  {
    "path": "app/assets/components/Charts/demo/mini-bar.md",
    "chars": 516,
    "preview": "---\norder: 2\ncol: 2\ntitle: 迷你柱状图\n---\n\n迷你柱状图更适合展示简单的区间数据,简洁的表现方式可以很好的减少大数据量的视觉展现压力。\n\n````jsx\nimport { MiniBar } from 'ant"
  },
  {
    "path": "app/assets/components/Charts/demo/mini-pie.md",
    "chars": 250,
    "preview": "---\norder: 6\ntitle: 迷你饼状图\n---\n\n通过简化 `Pie` 属性的设置,可以快速的实现极简的饼状图,可配合 `ChartCard` 组合展\n现更多业务场景。\n\n```jsx\nimport { Pie } from '"
  },
  {
    "path": "app/assets/components/Charts/demo/mini-progress.md",
    "chars": 194,
    "preview": "---\norder: 3\ntitle: 迷你进度条\n---\n\n````jsx\nimport { MiniProgress } from 'ant-design-pro/lib/Charts';\n\nReactDOM.render(\n  <Mi"
  },
  {
    "path": "app/assets/components/Charts/demo/mix.md",
    "chars": 2269,
    "preview": "---\norder: 0\ntitle: 图表套件组合展示\n---\n\n利用 Ant Design Pro 提供的图表套件,可以灵活组合符合设计规范的图表来满足复杂的业务需求。\n\n````jsx\nimport { ChartCard, Fiel"
  },
  {
    "path": "app/assets/components/Charts/demo/pie.md",
    "chars": 728,
    "preview": "---\norder: 5\ntitle: 饼状图\n---\n\n```jsx\nimport { Pie, yuan } from 'ant-design-pro/lib/Charts';\n\nconst salesPieData = [\n  {\n "
  },
  {
    "path": "app/assets/components/Charts/demo/radar.md",
    "chars": 942,
    "preview": "---\norder: 7\ntitle: 雷达图\n---\n\n````jsx\nimport { Radar, ChartCard } from 'ant-design-pro/lib/Charts';\n\nconst radarOriginDat"
  },
  {
    "path": "app/assets/components/Charts/demo/tag-cloud.md",
    "chars": 405,
    "preview": "---\norder: 9\ntitle: 标签云\n---\n\n标签云是一套相关的标签以及与此相应的权重展示方式,一般典型的标签云有 30 至 150 个标签,而权重影响使用的字体大小或其他视觉效果。\n\n````jsx\nimport { TagC"
  },
  {
    "path": "app/assets/components/Charts/demo/timeline-chart.md",
    "chars": 562,
    "preview": "---\norder: 9\ntitle: 带有时间轴的图表\n---\n\n使用 `TimelineChart` 组件可以实现带有时间轴的柱状图展现,而其中的 `x` 属性,则是时间值的指向,默认最多支持同时展现两个指标,分别是 `y1` 和 `y"
  },
  {
    "path": "app/assets/components/Charts/demo/waterwave.md",
    "chars": 291,
    "preview": "---\norder: 8\ntitle: 水波图 \n---\n\n水波图是一种比例的展示方式,可以更直观的展示关键值的占比。\n\n````jsx\nimport { WaterWave } from 'ant-design-pro/lib/Chart"
  },
  {
    "path": "app/assets/components/Charts/g2.js",
    "chars": 200,
    "preview": "// 全局 G2 设置\nimport { track, setTheme } from 'bizcharts';\n\ntrack(false);\n\nconst config = {\n  defaultColor: '#1089ff',\n  s"
  },
  {
    "path": "app/assets/components/Charts/index.d.ts",
    "chars": 693,
    "preview": "import * as numeral from 'numeral';\nexport { default as ChartCard } from './ChartCard';\nexport { default as Bar } from '"
  },
  {
    "path": "app/assets/components/Charts/index.js",
    "chars": 845,
    "preview": "import numeral from 'numeral';\nimport './g2';\nimport ChartCard from './ChartCard';\nimport Bar from './Bar';\nimport Pie f"
  },
  {
    "path": "app/assets/components/Charts/index.less",
    "chars": 297,
    "preview": ".miniChart {\n  position: relative;\n  width: 100%;\n  .chartContent {\n    position: absolute;\n    bottom: -28px;\n    width"
  },
  {
    "path": "app/assets/components/Charts/index.md",
    "chars": 5104,
    "preview": "---\ntitle:\n  en-US: Charts\n  zh-CN: Charts\nsubtitle: 图表\norder: 2\ncols: 2\n---\n\nAnt Design Pro 提供的业务中常用的图表类型,都是基于 [G2](htt"
  },
  {
    "path": "app/assets/components/CountDown/demo/simple.md",
    "chars": 318,
    "preview": "---\norder: 0\ntitle:\n  zh-CN: 基本\n  en-US: Basic\n---\n\n## zh-CN\n\n简单的倒计时组件使用。\n\n## en-US\n\nThe simplest usage.\n\n````jsx\nimport"
  },
  {
    "path": "app/assets/components/CountDown/index.d.ts",
    "chars": 263,
    "preview": "import * as React from 'react';\nexport interface ICountDownProps {\n  format?: (time: number) => void;\n  target: Date | n"
  },
  {
    "path": "app/assets/components/CountDown/index.en-US.md",
    "chars": 345,
    "preview": "---\ntitle: CountDown\ncols: 1\norder: 3\n---\n\nSimple CountDown Component.\n\n## API\n\n| Property | Description | Type | Defaul"
  },
  {
    "path": "app/assets/components/CountDown/index.js",
    "chars": 2493,
    "preview": "import React, { Component } from 'react';\n\nfunction fixedZero(val) {\n  return val * 1 < 10 ? `0${val}` : val;\n}\n\nclass C"
  },
  {
    "path": "app/assets/components/CountDown/index.zh-CN.md",
    "chars": 329,
    "preview": "---\ntitle: CountDown \nsubtitle: 倒计时\ncols: 1\norder: 3\n---\n\n倒计时组件。\n\n## API\n\n| 参数      | 说明                                "
  },
  {
    "path": "app/assets/components/DescriptionList/Description.d.ts",
    "chars": 171,
    "preview": "import * as React from 'react';\n\nexport default class Description extends React.Component<\n  {\n    term: React.ReactNode"
  },
  {
    "path": "app/assets/components/DescriptionList/Description.js",
    "chars": 700,
    "preview": "import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Col } from "
  },
  {
    "path": "app/assets/components/DescriptionList/DescriptionList.js",
    "chars": 794,
    "preview": "import React from 'react';\nimport classNames from 'classnames';\nimport { Row } from 'antd';\nimport styles from './index."
  },
  {
    "path": "app/assets/components/DescriptionList/demo/basic.md",
    "chars": 926,
    "preview": "---\norder: 0\ntitle:\n  zh-CN: 基本\n  en-US: Basic\n---\n\n## zh-CN\n\n基本描述列表。\n\n## en-US\n\nBasic DescriptionList.\n\n````jsx\nimport "
  },
  {
    "path": "app/assets/components/DescriptionList/demo/vertical.md",
    "chars": 940,
    "preview": "---\norder: 1\ntitle:\n  zh-CN: 垂直型\n  en-US: Vertical\n---\n\n## zh-CN\n\n垂直布局。\n\n## en-US\n\nVertical layout.\n\n````jsx\nimport Desc"
  },
  {
    "path": "app/assets/components/DescriptionList/index.d.ts",
    "chars": 418,
    "preview": "import * as React from 'react';\nimport Description from './Description';\n\nexport interface IDescriptionListProps {\n  lay"
  },
  {
    "path": "app/assets/components/DescriptionList/index.en-US.md",
    "chars": 1555,
    "preview": "---\ntitle: DescriptionList\ncols: 1\norder: 4\n---\n\nGroups display multiple read-only fields, which are common to informati"
  },
  {
    "path": "app/assets/components/DescriptionList/index.js",
    "chars": 166,
    "preview": "import DescriptionList from './DescriptionList';\nimport Description from './Description';\n\nDescriptionList.Description ="
  },
  {
    "path": "app/assets/components/DescriptionList/index.less",
    "chars": 1238,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.descriptionList {\n  // offset the padding-bottom of last row\n  :global "
  },
  {
    "path": "app/assets/components/DescriptionList/index.zh-CN.md",
    "chars": 1306,
    "preview": "---\ntitle: DescriptionList\nsubtitle: 描述列表\ncols: 1\norder: 4\n---\n\n成组展示多个只读字段,常见于详情页的信息展示。\n\n## API\n\n### DescriptionList\n\n| "
  },
  {
    "path": "app/assets/components/DescriptionList/responsive.js",
    "chars": 126,
    "preview": "export default {\n  1: { xs: 24 },\n  2: { xs: 24, sm: 12 },\n  3: { xs: 24, sm: 12, md: 8 },\n  4: { xs: 24, sm: 12, md: 6 "
  },
  {
    "path": "app/assets/components/EditableItem/index.js",
    "chars": 1134,
    "preview": "import React, { PureComponent } from 'react';\nimport { Input, Icon } from 'antd';\nimport styles from './index.less';\n\nex"
  },
  {
    "path": "app/assets/components/EditableItem/index.less",
    "chars": 416,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.editableItem {\n  line-height: @input-height-base;\n  display: table;\n  w"
  },
  {
    "path": "app/assets/components/EditableLinkGroup/index.js",
    "chars": 1067,
    "preview": "import React, { PureComponent, createElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from "
  },
  {
    "path": "app/assets/components/EditableLinkGroup/index.less",
    "chars": 294,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.linkGroup {\n  padding: 20px 0 8px 24px;\n  font-size: 0;\n  & > a {\n    c"
  },
  {
    "path": "app/assets/components/Ellipsis/demo/line.md",
    "chars": 959,
    "preview": "---\norder: 1\ntitle: \n  zh-CN: 按照行数省略\n  en-US: Truncate according to the number of rows\n---\n\n## zh-CN\n\n通过设置 `lines` 属性指定最"
  },
  {
    "path": "app/assets/components/Ellipsis/demo/number.md",
    "chars": 778,
    "preview": "---\norder: 0\ntitle: \n  zh-CN: 按照字符数省略\n  en-US: Truncate according to the number of character\n---\n\n## zh-CN\n\n通过设置 `length"
  },
  {
    "path": "app/assets/components/Ellipsis/index.d.ts",
    "chars": 258,
    "preview": "import * as React from 'react';\nexport interface IEllipsisProps {\n  tooltip?: boolean;\n  length?: number;\n  lines?: numb"
  },
  {
    "path": "app/assets/components/Ellipsis/index.en-US.md",
    "chars": 493,
    "preview": "---\ntitle: Ellipsis \ncols: 1\norder: 10\n---\n\nWhen the text is too long, the Ellipsis automatically shortens it according "
  },
  {
    "path": "app/assets/components/Ellipsis/index.js",
    "chars": 5483,
    "preview": "import React, { Component } from 'react';\nimport { Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport st"
  },
  {
    "path": "app/assets/components/Ellipsis/index.less",
    "chars": 361,
    "preview": ".ellipsis {\n  overflow: hidden;\n  display: inline-block;\n  word-break: break-all;\n  width: 100%;\n}\n\n.lines {\n  position:"
  },
  {
    "path": "app/assets/components/Ellipsis/index.zh-CN.md",
    "chars": 278,
    "preview": "---\ntitle: Ellipsis\nsubtitle: 文本自动省略号\ncols: 1\norder: 10\n---\n\n文本过长自动处理省略号,支持按照文本长度和最大行数两种方式截取。\n\n## API\n\n参数 | 说明 | 类型 | 默认"
  },
  {
    "path": "app/assets/components/Exception/demo/403.md",
    "chars": 404,
    "preview": "---\norder: 2\ntitle:\n  zh-CN: 403\n  en-US: 403\n---\n\n## zh-CN\n\n403 页面,配合自定义操作。\n\n## en-US\n\n403 page with custom operations."
  },
  {
    "path": "app/assets/components/Exception/demo/404.md",
    "chars": 217,
    "preview": "---\norder: 0\ntitle:\n  zh-CN: 404\n  en-US: 404\n---\n\n## zh-CN\n\n404 页面。\n\n## en-US\n\n404 page.\n\n````jsx\nimport Exception from"
  },
  {
    "path": "app/assets/components/Exception/demo/500.md",
    "chars": 217,
    "preview": "---\norder: 1\ntitle:\n  zh-CN: 500\n  en-US: 500\n---\n\n## zh-CN\n\n500 页面。\n\n## en-US\n\n500 page.\n\n````jsx\nimport Exception from"
  },
  {
    "path": "app/assets/components/Exception/index.d.ts",
    "chars": 344,
    "preview": "import * as React from 'react';\nexport interface IExceptionProps {\n  type?: '403' | '404' | '500';\n  title?: React.React"
  },
  {
    "path": "app/assets/components/Exception/index.en-US.md",
    "chars": 851,
    "preview": "---\ntitle: Exception\ncols: 1\norder: 5\n---\n\nExceptions page is used to provide feedback on specific abnormal state. Usual"
  },
  {
    "path": "app/assets/components/Exception/index.js",
    "chars": 1146,
    "preview": "import React, { createElement } from 'react';\nimport classNames from 'classnames';\nimport { Button } from 'antd';\nimport"
  },
  {
    "path": "app/assets/components/Exception/index.less",
    "chars": 1413,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.exception {\n  display: flex;\n  align-items: center;\n  height: 100%;\n\n  "
  },
  {
    "path": "app/assets/components/Exception/index.zh-CN.md",
    "chars": 666,
    "preview": "---\ntitle: Exception\nsubtitle: 异常\ncols: 1\norder: 5\n---\n\n异常页用于对页面特定的异常状态进行反馈。通常,它包含对错误状态的阐述,并向用户提供建议或操作,避免用户感到迷失和困惑。\n\n## "
  },
  {
    "path": "app/assets/components/Exception/typeConfig.js",
    "chars": 454,
    "preview": "const config = {\n  403: {\n    img: 'https://gw.alipayobjects.com/zos/rmsportal/wZcnGqRDyhPOEYFcZDnb.svg',\n    title: '40"
  },
  {
    "path": "app/assets/components/FooterToolbar/demo/basic.md",
    "chars": 1102,
    "preview": "---\norder: 0\ntitle:\n  zh-CN: 演示\n  en-US: demo\niframe: 400\n---\n\n## zh-CN\n\n浮动固定页脚。\n\n## en-US\n\nFixed to the footer.\n\n````js"
  },
  {
    "path": "app/assets/components/FooterToolbar/index.d.ts",
    "chars": 219,
    "preview": "import * as React from 'react';\nexport interface IFooterToolbarProps {\n  extra: React.ReactNode;\n  style?: React.CSSProp"
  },
  {
    "path": "app/assets/components/FooterToolbar/index.en-US.md",
    "chars": 465,
    "preview": "---\ntitle: FooterToolbar\ncols: 1\norder: 6\n---\n\nA toolbar fixed at the bottom.\n\n## Usage\n\nIt is fixed at the bottom of th"
  },
  {
    "path": "app/assets/components/FooterToolbar/index.js",
    "chars": 474,
    "preview": "import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport styles from './index.less';\n\nexpor"
  },
  {
    "path": "app/assets/components/FooterToolbar/index.less",
    "chars": 485,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.toolbar {\n  position: fixed;\n  width: 100%;\n  bottom: 0;\n  right: 0;\n  "
  },
  {
    "path": "app/assets/components/FooterToolbar/index.zh-CN.md",
    "chars": 246,
    "preview": "---\ntitle: FooterToolbar\nsubtitle: 底部工具栏\ncols: 1\norder: 6\n---\n\n固定在底部的工具栏。\n\n## 何时使用\n\n固定在内容区域的底部,不随滚动条移动,常用于长页面的数据搜集和提交工作。"
  },
  {
    "path": "app/assets/components/GlobalFooter/demo/basic.md",
    "chars": 689,
    "preview": "---\norder: 0\ntitle: 演示\niframe: 400\n---\n\n基本页脚。\n\n````jsx\nimport GlobalFooter from 'ant-design-pro/lib/GlobalFooter';\nimpor"
  },
  {
    "path": "app/assets/components/GlobalFooter/index.d.ts",
    "chars": 336,
    "preview": "import * as React from 'react';\nexport interface IGlobalFooterProps {\n  links?: Array<{\n    key?: string;\n    title: Rea"
  },
  {
    "path": "app/assets/components/GlobalFooter/index.js",
    "chars": 654,
    "preview": "import React from 'react';\nimport classNames from 'classnames';\nimport styles from './index.less';\n\nconst GlobalFooter ="
  },
  {
    "path": "app/assets/components/GlobalFooter/index.less",
    "chars": 454,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.globalFooter {\n  padding: 0 16px;\n  margin: 48px 0 24px 0;\n  text-align"
  },
  {
    "path": "app/assets/components/GlobalFooter/index.md",
    "chars": 300,
    "preview": "---\ntitle:\n  en-US: GlobalFooter\n  zh-CN: GlobalFooter\nsubtitle: 全局页脚\ncols: 1\norder: 7\n---\n\n页脚属于全局导航的一部分,作为对顶部导航的补充,通过传递"
  },
  {
    "path": "app/assets/components/GlobalHeader/index.js",
    "chars": 1841,
    "preview": "import React, { PureComponent } from 'react';\nimport { Icon, Divider, Tooltip } from 'antd';\nimport Debounce from 'lodas"
  },
  {
    "path": "app/assets/components/GlobalHeader/index.less",
    "chars": 1887,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.header {\n  height: 64px;\n  padding: 0 12px 0 0;\n  background: #fff;\n  b"
  },
  {
    "path": "app/assets/components/HeaderSearch/demo/basic.md",
    "chars": 668,
    "preview": "---\norder: 0\ntitle: 全局搜索\n---\n\n通常放置在导航工具条右侧。(点击搜索图标预览效果)\n\n````jsx\nimport HeaderSearch from 'ant-design-pro/lib/HeaderSear"
  },
  {
    "path": "app/assets/components/HeaderSearch/index.d.ts",
    "chars": 357,
    "preview": "import * as React from 'react';\nexport interface IHeaderSearchProps {\n  placeholder?: string;\n  dataSource?: string[];\n "
  },
  {
    "path": "app/assets/components/HeaderSearch/index.js",
    "chars": 2319,
    "preview": "import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { Input, Icon, AutoComplete } f"
  },
  {
    "path": "app/assets/components/HeaderSearch/index.less",
    "chars": 612,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.headerSearch {\n  :global(.anticon-search) {\n    cursor: pointer;\n    fo"
  },
  {
    "path": "app/assets/components/HeaderSearch/index.md",
    "chars": 419,
    "preview": "---\ntitle:\n  en-US: HeaderSearch\n  zh-CN: HeaderSearch\nsubtitle: 顶部搜索框\ncols: 1\norder: 8\n---\n\n通常作为全局搜索的入口,放置在导航工具条右侧。\n\n##"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/AddButton.js",
    "chars": 472,
    "preview": "import React from \"react\";\nimport IconButton from \"./IconButton\";\n\nexport default function AddButton({ className, onClic"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/ErrorList.js",
    "chars": 512,
    "preview": "import React from \"react\";\n\nexport default function ErrorList(props) {\n  const { errors } = props;\n  return (\n    <div c"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/Form.js",
    "chars": 8379,
    "preview": "import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { default as DefaultErrorList } fr"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/IconButton.js",
    "chars": 332,
    "preview": "import React from \"react\";\n\nexport default function IconButton(props) {\n  const { type = \"default\", icon, className, ..."
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/fields/ArrayField.js",
    "chars": 18401,
    "preview": "import AddButton from \"../AddButton\";\nimport IconButton from \"../IconButton\";\nimport React, { Component } from \"react\";\n"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/fields/BooleanField.js",
    "chars": 1847,
    "preview": "import React from \"react\";\nimport * as types from \"../../types\";\n\nimport {\n  getWidget,\n  getUiOptions,\n  optionsList,\n "
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/fields/DescriptionField.js",
    "chars": 666,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction DescriptionField(props) {\n  const { id, descrip"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/fields/MultiSchemaField.js",
    "chars": 6048,
    "preview": "import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport * as types from \"../../types\";\nimpo"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/fields/NumberField.js",
    "chars": 3412,
    "preview": "import React from \"react\";\n\nimport * as types from \"../../types\";\nimport { asNumber } from \"../../utils\";\n\n// Matches a "
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/fields/ObjectField.js",
    "chars": 7895,
    "preview": "import AddButton from \"../AddButton\";\nimport React, { Component } from \"react\";\nimport * as types from \"../../types\";\n\ni"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/fields/SchemaField.js",
    "chars": 10668,
    "preview": "import { ADDITIONAL_PROPERTY_FLAG } from \"../../utils\";\nimport IconButton from \"../IconButton\";\nimport React from \"react"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/fields/StringField.js",
    "chars": 1569,
    "preview": "import React from \"react\";\nimport * as types from \"../../types\";\n\nimport {\n  getWidget,\n  getUiOptions,\n  isSelect,\n  op"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/fields/TitleField.js",
    "chars": 508,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nconst REQUIRED_FIELD_SYMBOL = \"*\";\n\nfunction TitleField("
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/fields/UnsupportedField.js",
    "chars": 712,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction UnsupportedField({ schema, idSchema, reason }) "
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/fields/index.js",
    "chars": 667,
    "preview": "import ArrayField from \"./ArrayField\";\nimport BooleanField from \"./BooleanField\";\nimport DescriptionField from \"./Descri"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/AltDateTimeWidget.js",
    "chars": 649,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport AltDateWidget from \"./AltDateWidget\";\n\nfunction Al"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/AltDateWidget.js",
    "chars": 4821,
    "preview": "import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { shouldRender, parseDateString, t"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/BaseInput.js",
    "chars": 2520,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction BaseInput(props) {\n  // Note: since React 15.2."
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/CheckboxWidget.js",
    "chars": 2530,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport DescriptionField from \"../fields/DescriptionField."
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/CheckboxesWidget.js",
    "chars": 2683,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction selectValue(value, selected, all) {\n  const at "
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/ColorWidget.js",
    "chars": 648,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction ColorWidget(props) {\n  const {\n    disabled,\n  "
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/DateTimeWidget.js",
    "chars": 1482,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { pad } from \"../../utils\";\n\nexport function utcTo"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/DateWidget.js",
    "chars": 450,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction DateWidget(props) {\n  const {\n    onChange,\n   "
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/EmailWidget.js",
    "chars": 331,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction EmailWidget(props) {\n  const { BaseInput } = pr"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/FileWidget.js",
    "chars": 4246,
    "preview": "import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport ImageZoom from \"react-medium-image-"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/HiddenWidget.js",
    "chars": 489,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction HiddenWidget({ id, value }) {\n  return (\n    <i"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/PasswordWidget.js",
    "chars": 343,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction PasswordWidget(props) {\n  const { BaseInput } ="
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/RadioWidget.js",
    "chars": 2369,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction RadioWidget(props) {\n  const {\n    options,\n   "
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/RangeWidget.js",
    "chars": 603,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { rangeSpec } from \"../../utils\";\n\nfunction Range"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/SelectWidget.js",
    "chars": 3320,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { asNumber, guessType } from \"../../utils\";\n\ncons"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/TextWidget.js",
    "chars": 382,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction TextWidget(props) {\n  const { BaseInput } = pro"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/TextareaWidget.js",
    "chars": 1457,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction TextareaWidget(props) {\n  const {\n    id,\n    o"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/URLWidget.js",
    "chars": 323,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction URLWidget(props) {\n  const { BaseInput } = prop"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/UpDownWidget.js",
    "chars": 475,
    "preview": "import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { rangeSpec } from \"../../utils\";\n\nfunction UpDow"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/components/widgets/index.js",
    "chars": 1148,
    "preview": "import AltDateWidget from \"./AltDateWidget\";\nimport AltDateTimeWidget from \"./AltDateTimeWidget\";\nimport BaseInput from "
  },
  {
    "path": "app/assets/components/JsonSchemaForm/constants.js",
    "chars": 189,
    "preview": "export default {\n  // 测试\n  uploadUsername: \"root\",\n  uploadPassword: \"root1234\",\n  uploadBaseUrl: \"http://localhost:7100"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/index.js",
    "chars": 60,
    "preview": "import Form from \"./components/Form\";\n\nexport default Form;\n"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/types.js",
    "chars": 1071,
    "preview": "import PropTypes from \"prop-types\";\n\nexport const registry = PropTypes.shape({\n  ArrayFieldTemplate: PropTypes.func,\n  F"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/utils.js",
    "chars": 24819,
    "preview": "import React from \"react\";\nimport validateFormData from \"./validate\";\nimport fill from \"core-js/library/fn/array/fill\";\n"
  },
  {
    "path": "app/assets/components/JsonSchemaForm/validate.js",
    "chars": 7771,
    "preview": "import toPath from \"lodash.topath\";\nimport Ajv from \"ajv\";\nimport localize from 'ajv-i18n';\nlet ajv = createAjvInstance("
  },
  {
    "path": "app/assets/components/Login/LoginItem.js",
    "chars": 2961,
    "preview": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Button, Row, Col } from 'an"
  },
  {
    "path": "app/assets/components/Login/LoginSubmit.js",
    "chars": 448,
    "preview": "import React from 'react';\nimport classNames from 'classnames';\nimport { Button, Form } from 'antd';\nimport styles from "
  },
  {
    "path": "app/assets/components/Login/LoginTab.js",
    "chars": 672,
    "preview": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Tabs } from 'antd';\n\nconst { TabP"
  },
  {
    "path": "app/assets/components/Login/demo/basic.md",
    "chars": 3125,
    "preview": "---\norder: 0\ntitle:\n  zh-CN: 标准登录\n  en-US: Standard Login\n---\n\nSupport login with account and mobile number.\n\n````jsx\nim"
  },
  {
    "path": "app/assets/components/Login/index.d.ts",
    "chars": 883,
    "preview": "import * as React from 'react';\nimport Button from 'antd/lib/button';\nexport interface LoginProps {\n  defaultActiveKey?:"
  },
  {
    "path": "app/assets/components/Login/index.en-US.md",
    "chars": 1522,
    "preview": "---\ntitle: Login\ncols: 1\norder: 15\n---\n\nSupport multiple common ways of login with built-in controls. You can choose you"
  },
  {
    "path": "app/assets/components/Login/index.js",
    "chars": 2987,
    "preview": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Tabs } from 'antd';\nimport "
  },
  {
    "path": "app/assets/components/Login/index.less",
    "chars": 711,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.login {\n  .tabs {\n    padding: 0 2px;\n    margin: 0 -2px;\n    :global {"
  },
  {
    "path": "app/assets/components/Login/index.zh-CN.md",
    "chars": 1000,
    "preview": "---\ntitle: Login\nsubtitle: 登录\ncols: 1\norder: 15\n---\n\n支持多种登录方式切换,内置了几种常见的登录控件,可以灵活组合,也支持和自定义控件配合使用。\n\n## API\n\n### Login\n\n参"
  },
  {
    "path": "app/assets/components/Login/map.js",
    "chars": 1357,
    "preview": "import React from 'react';\nimport { Input, Icon } from 'antd';\nimport styles from './index.less';\n\nconst map = {\n  UserN"
  },
  {
    "path": "app/assets/components/NoticeIcon/NoticeIconTab.d.ts",
    "chars": 498,
    "preview": "import * as React from 'react';\nexport interface INoticeIconData {\n  avatar?: string;\n  title?: React.ReactNode;\n  descr"
  },
  {
    "path": "app/assets/components/NoticeIcon/NoticeList.js",
    "chars": 1716,
    "preview": "import React from 'react';\nimport { Avatar, List } from 'antd';\nimport classNames from 'classnames';\nimport styles from "
  },
  {
    "path": "app/assets/components/NoticeIcon/NoticeList.less",
    "chars": 1353,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.list {\n  max-height: 400px;\n  overflow: auto;\n  .item {\n    transition:"
  },
  {
    "path": "app/assets/components/NoticeIcon/demo/basic.md",
    "chars": 167,
    "preview": "---\norder: 1\ntitle: 通知图标\n---\n\n通常用在导航工具栏上。\n\n````jsx\nimport NoticeIcon from 'ant-design-pro/lib/NoticeIcon';\n\nReactDOM.ren"
  },
  {
    "path": "app/assets/components/NoticeIcon/demo/popover.md",
    "chars": 4255,
    "preview": "---\norder: 2\ntitle: 带浮层卡片\n---\n\n点击展开通知卡片,展现多种类型的通知,通常放在导航工具栏。\n\n````jsx\nimport NoticeIcon from 'ant-design-pro/lib/NoticeI"
  },
  {
    "path": "app/assets/components/NoticeIcon/index.d.ts",
    "chars": 869,
    "preview": "import React from 'react';\nimport NoticeIconTab, { INoticeIconData } from './NoticeIconTab';\n\nexport interface INoticeIc"
  },
  {
    "path": "app/assets/components/NoticeIcon/index.js",
    "chars": 2925,
    "preview": "import React, { PureComponent } from 'react';\nimport { Popover, Icon, Tabs, Badge, Spin } from 'antd';\nimport classNames"
  },
  {
    "path": "app/assets/components/NoticeIcon/index.less",
    "chars": 408,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.popover {\n  width: 336px;\n  :global(.ant-popover-inner-content) {\n    p"
  },
  {
    "path": "app/assets/components/NoticeIcon/index.md",
    "chars": 1085,
    "preview": "---\ntitle:\n  en-US: NoticeIcon\n  zh-CN: NoticeIcon\nsubtitle: 通知菜单\ncols: 1\norder: 9\n---\n\n用在导航工具栏上,作为整个产品统一的通知中心。\n\n## API\n"
  },
  {
    "path": "app/assets/components/NumberInfo/demo/basic.md",
    "chars": 433,
    "preview": "---\norder: 0\ntitle: \n  zh-CN: 演示\n  en-US: Demo\n---\n\n## zh-CN\n\n各种数据文案的展现方式。\n\n## en-US\n\nUsed for presenting various numeri"
  },
  {
    "path": "app/assets/components/NumberInfo/index.d.ts",
    "chars": 376,
    "preview": "import * as React from 'react';\nexport interface INumberInfoProps {\n  title?: React.ReactNode | string;\n  subTitle?: Rea"
  },
  {
    "path": "app/assets/components/NumberInfo/index.en-US.md",
    "chars": 540,
    "preview": "---\ntitle: NumberInfo\ncols: 1\norder: 10\n---\n\nOften used in data cards for highlighting the business data.\n\n## API\n\nPrope"
  },
  {
    "path": "app/assets/components/NumberInfo/index.js",
    "chars": 922,
    "preview": "import React from 'react';\nimport { Icon } from 'antd';\nimport classNames from 'classnames';\nimport styles from './index"
  },
  {
    "path": "app/assets/components/NumberInfo/index.less",
    "chars": 1367,
    "preview": "@import '~antd/lib/style/themes/default.less';\n\n.numberInfo {\n  .suffix {\n    color: @text-color;\n    font-size: 16px;\n "
  },
  {
    "path": "app/assets/components/NumberInfo/index.zh-CN.md",
    "chars": 384,
    "preview": "---\ntitle: NumberInfo\nsubtitle: 数据文本\ncols: 1\norder: 10\n---\n\n常用在数据卡片中,用于突出展示某个业务数据。\n\n## API\n\n参数 | 说明 | 类型 | 默认值\n----|----"
  }
]

// ... and 130 more files (download for full content)

About this extraction

This page contains the full source code of the win-winFE/dms GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 330 files (3.7 MB), approximately 999.4k tokens, and a symbol index with 3910 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!