#
tokens: 49514/50000 66/1152 files (page 1/52)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 1 of 52. Use http://codebase.md/alibaba/formily?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .all-contributorsrc
├── .codecov.yml
├── .editorconfig
├── .eslintignore
├── .eslintrc
├── .github
│   ├── CONTRIBUTING.md
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE
│   │   └── config.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows
│       ├── check-pr-title.yml
│       ├── ci.yml
│       ├── commitlint.yml
│       ├── issue-open-check.yml
│       ├── package-size.yml
│       └── pr-welcome.yml
├── .gitignore
├── .prettierrc.js
├── .umirc.js
├── .vscode
│   └── cspell.json
├── .yarnrc
├── CHANGELOG.md
├── commitlint.config.js
├── devtools
│   ├── .eslintrc
│   └── chrome-extension
│       ├── .npmignore
│       ├── assets
│       │   └── img
│       │       ├── loading.svg
│       │       └── logo
│       │           ├── 128x128.png
│       │           ├── 16x16.png
│       │           ├── 38x38.png
│       │           ├── 48x48.png
│       │           ├── error.png
│       │           ├── gray.png
│       │           └── scalable.png
│       ├── config
│       │   ├── webpack.base.ts
│       │   ├── webpack.dev.ts
│       │   └── webpack.prod.ts
│       ├── LICENSE.md
│       ├── package.json
│       ├── src
│       │   ├── app
│       │   │   ├── components
│       │   │   │   ├── FieldTree.tsx
│       │   │   │   ├── filter.ts
│       │   │   │   ├── LeftPanel.tsx
│       │   │   │   ├── RightPanel.tsx
│       │   │   │   ├── SearchBox.tsx
│       │   │   │   └── Tabs.tsx
│       │   │   ├── demo.tsx
│       │   │   └── index.tsx
│       │   └── extension
│       │       ├── backend.ts
│       │       ├── background.ts
│       │       ├── content.ts
│       │       ├── devpanel.tsx
│       │       ├── devtools.tsx
│       │       ├── inject.ts
│       │       ├── manifest.json
│       │       ├── popup.tsx
│       │       └── views
│       │           ├── devpanel.ejs
│       │           ├── devtools.ejs
│       │           └── popup.ejs
│       ├── tsconfig.build.json
│       └── tsconfig.json
├── docs
│   ├── functions
│   │   ├── contributors.ts
│   │   └── npm-search.ts
│   ├── guide
│   │   ├── advanced
│   │   │   ├── async.md
│   │   │   ├── async.zh-CN.md
│   │   │   ├── build.md
│   │   │   ├── build.zh-CN.md
│   │   │   ├── business-logic.md
│   │   │   ├── business-logic.zh-CN.md
│   │   │   ├── calculator.md
│   │   │   ├── calculator.zh-CN.md
│   │   │   ├── controlled.md
│   │   │   ├── controlled.zh-CN.md
│   │   │   ├── custom.md
│   │   │   ├── custom.zh-CN.md
│   │   │   ├── destructor.md
│   │   │   ├── destructor.zh-CN.md
│   │   │   ├── input.less
│   │   │   ├── layout.md
│   │   │   ├── layout.zh-CN.md
│   │   │   ├── linkages.md
│   │   │   ├── linkages.zh-CN.md
│   │   │   ├── validate.md
│   │   │   └── validate.zh-CN.md
│   │   ├── contribution.md
│   │   ├── contribution.zh-CN.md
│   │   ├── form-builder.md
│   │   ├── form-builder.zh-CN.md
│   │   ├── index.md
│   │   ├── index.zh-CN.md
│   │   ├── issue-helper.md
│   │   ├── issue-helper.zh-CN.md
│   │   ├── learn-formily.md
│   │   ├── learn-formily.zh-CN.md
│   │   ├── quick-start.md
│   │   ├── quick-start.zh-CN.md
│   │   ├── scenes
│   │   │   ├── dialog-drawer.md
│   │   │   ├── dialog-drawer.zh-CN.md
│   │   │   ├── edit-detail.md
│   │   │   ├── edit-detail.zh-CN.md
│   │   │   ├── index.less
│   │   │   ├── login-register.md
│   │   │   ├── login-register.zh-CN.md
│   │   │   ├── more.md
│   │   │   ├── more.zh-CN.md
│   │   │   ├── query-list.md
│   │   │   ├── query-list.zh-CN.md
│   │   │   ├── step-form.md
│   │   │   ├── step-form.zh-CN.md
│   │   │   ├── tab-form.md
│   │   │   ├── tab-form.zh-CN.md
│   │   │   └── VerifyCode.tsx
│   │   ├── upgrade.md
│   │   └── upgrade.zh-CN.md
│   ├── index.md
│   ├── index.zh-CN.md
│   └── site
│       ├── Contributors.less
│       ├── Contributors.tsx
│       ├── QrCode.less
│       ├── QrCode.tsx
│       ├── Section.less
│       ├── Section.tsx
│       └── styles.less
├── global.config.ts
├── jest.config.js
├── lerna.json
├── LICENSE.md
├── package.json
├── packages
│   ├── .eslintrc
│   ├── antd
│   │   ├── __tests__
│   │   │   ├── moment.spec.ts
│   │   │   └── sideEffects.spec.ts
│   │   ├── .npmignore
│   │   ├── .umirc.js
│   │   ├── build-style.ts
│   │   ├── create-style.ts
│   │   ├── docs
│   │   │   ├── components
│   │   │   │   ├── ArrayCards.md
│   │   │   │   ├── ArrayCards.zh-CN.md
│   │   │   │   ├── ArrayCollapse.md
│   │   │   │   ├── ArrayCollapse.zh-CN.md
│   │   │   │   ├── ArrayItems.md
│   │   │   │   ├── ArrayItems.zh-CN.md
│   │   │   │   ├── ArrayTable.md
│   │   │   │   ├── ArrayTable.zh-CN.md
│   │   │   │   ├── ArrayTabs.md
│   │   │   │   ├── ArrayTabs.zh-CN.md
│   │   │   │   ├── Cascader.md
│   │   │   │   ├── Cascader.zh-CN.md
│   │   │   │   ├── Checkbox.md
│   │   │   │   ├── Checkbox.zh-CN.md
│   │   │   │   ├── DatePicker.md
│   │   │   │   ├── DatePicker.zh-CN.md
│   │   │   │   ├── Editable.md
│   │   │   │   ├── Editable.zh-CN.md
│   │   │   │   ├── Form.md
│   │   │   │   ├── Form.zh-CN.md
│   │   │   │   ├── FormButtonGroup.md
│   │   │   │   ├── FormButtonGroup.zh-CN.md
│   │   │   │   ├── FormCollapse.md
│   │   │   │   ├── FormCollapse.zh-CN.md
│   │   │   │   ├── FormDialog.md
│   │   │   │   ├── FormDialog.zh-CN.md
│   │   │   │   ├── FormDrawer.md
│   │   │   │   ├── FormDrawer.zh-CN.md
│   │   │   │   ├── FormGrid.md
│   │   │   │   ├── FormGrid.zh-CN.md
│   │   │   │   ├── FormItem.md
│   │   │   │   ├── FormItem.zh-CN.md
│   │   │   │   ├── FormLayout.md
│   │   │   │   ├── FormLayout.zh-CN.md
│   │   │   │   ├── FormStep.md
│   │   │   │   ├── FormStep.zh-CN.md
│   │   │   │   ├── FormTab.md
│   │   │   │   ├── FormTab.zh-CN.md
│   │   │   │   ├── index.md
│   │   │   │   ├── index.zh-CN.md
│   │   │   │   ├── Input.md
│   │   │   │   ├── Input.zh-CN.md
│   │   │   │   ├── NumberPicker.md
│   │   │   │   ├── NumberPicker.zh-CN.md
│   │   │   │   ├── Password.md
│   │   │   │   ├── Password.zh-CN.md
│   │   │   │   ├── PreviewText.md
│   │   │   │   ├── PreviewText.zh-CN.md
│   │   │   │   ├── Radio.md
│   │   │   │   ├── Radio.zh-CN.md
│   │   │   │   ├── Reset.md
│   │   │   │   ├── Reset.zh-CN.md
│   │   │   │   ├── Select.md
│   │   │   │   ├── Select.zh-CN.md
│   │   │   │   ├── SelectTable.md
│   │   │   │   ├── SelectTable.zh-CN.md
│   │   │   │   ├── Space.md
│   │   │   │   ├── Space.zh-CN.md
│   │   │   │   ├── Submit.md
│   │   │   │   ├── Submit.zh-CN.md
│   │   │   │   ├── Switch.md
│   │   │   │   ├── Switch.zh-CN.md
│   │   │   │   ├── TimePicker.md
│   │   │   │   ├── TimePicker.zh-CN.md
│   │   │   │   ├── Transfer.md
│   │   │   │   ├── Transfer.zh-CN.md
│   │   │   │   ├── TreeSelect.md
│   │   │   │   ├── TreeSelect.zh-CN.md
│   │   │   │   ├── Upload.md
│   │   │   │   └── Upload.zh-CN.md
│   │   │   ├── index.md
│   │   │   └── index.zh-CN.md
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── __builtins__
│   │   │   │   ├── hooks
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── useClickAway.ts
│   │   │   │   │   └── usePrefixCls.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── loading.ts
│   │   │   │   ├── moment.ts
│   │   │   │   ├── pickDataProps.ts
│   │   │   │   ├── portal.tsx
│   │   │   │   ├── render.ts
│   │   │   │   └── sort.tsx
│   │   │   ├── array-base
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── array-cards
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── array-collapse
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── array-items
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── array-table
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── array-tabs
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── cascader
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── checkbox
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── date-picker
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── editable
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── form
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── form-button-group
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── form-collapse
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── form-dialog
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── form-drawer
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── form-grid
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── form-item
│   │   │   │   ├── animation.less
│   │   │   │   ├── grid.less
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── form-layout
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   ├── style.ts
│   │   │   │   └── useResponsiveFormLayout.ts
│   │   │   ├── form-step
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── form-tab
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── index.ts
│   │   │   ├── input
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── number-picker
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── password
│   │   │   │   ├── index.tsx
│   │   │   │   ├── PasswordStrength.tsx
│   │   │   │   └── style.ts
│   │   │   ├── preview-text
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── radio
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   └── style.ts
│   │   │   ├── reset
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── select
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── select-table
│   │   │   │   ├── index.tsx
│   │   │   │   ├── style.less
│   │   │   │   ├── style.ts
│   │   │   │   ├── useCheckSlackly.tsx
│   │   │   │   ├── useFilterOptions.tsx
│   │   │   │   ├── useFlatOptions.tsx
│   │   │   │   ├── useSize.tsx
│   │   │   │   ├── useTitleAddon.tsx
│   │   │   │   └── utils.ts
│   │   │   ├── space
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── style.less
│   │   │   ├── style.ts
│   │   │   ├── submit
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── switch
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── time-picker
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── transfer
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── tree-select
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   └── upload
│   │   │       ├── index.tsx
│   │   │       ├── placeholder.ts
│   │   │       └── style.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── benchmark
│   │   ├── .npmignore
│   │   ├── .umirc.js
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── src
│   │   │   └── index.tsx
│   │   ├── template.ejs
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   ├── webpack.base.ts
│   │   ├── webpack.dev.ts
│   │   └── webpack.prod.ts
│   ├── core
│   │   ├── .npmignore
│   │   ├── .umirc.js
│   │   ├── docs
│   │   │   ├── api
│   │   │   │   ├── entry
│   │   │   │   │   ├── ActionResponse.less
│   │   │   │   │   ├── ActionResponse.tsx
│   │   │   │   │   ├── createForm.md
│   │   │   │   │   ├── createForm.zh-CN.md
│   │   │   │   │   ├── FieldEffectHooks.md
│   │   │   │   │   ├── FieldEffectHooks.zh-CN.md
│   │   │   │   │   ├── FormChecker.md
│   │   │   │   │   ├── FormChecker.zh-CN.md
│   │   │   │   │   ├── FormEffectHooks.md
│   │   │   │   │   ├── FormEffectHooks.zh-CN.md
│   │   │   │   │   ├── FormHooksAPI.md
│   │   │   │   │   ├── FormHooksAPI.zh-CN.md
│   │   │   │   │   ├── FormPath.md
│   │   │   │   │   ├── FormPath.zh-CN.md
│   │   │   │   │   ├── FormValidatorRegistry.md
│   │   │   │   │   └── FormValidatorRegistry.zh-CN.md
│   │   │   │   └── models
│   │   │   │       ├── ArrayField.md
│   │   │   │       ├── ArrayField.zh-CN.md
│   │   │   │       ├── Field.md
│   │   │   │       ├── Field.zh-CN.md
│   │   │   │       ├── Form.md
│   │   │   │       ├── Form.zh-CN.md
│   │   │   │       ├── ObjectField.md
│   │   │   │       ├── ObjectField.zh-CN.md
│   │   │   │       ├── Query.md
│   │   │   │       ├── Query.zh-CN.md
│   │   │   │       ├── VoidField.md
│   │   │   │       └── VoidField.zh-CN.md
│   │   │   ├── guide
│   │   │   │   ├── architecture.md
│   │   │   │   ├── architecture.zh-CN.md
│   │   │   │   ├── field.md
│   │   │   │   ├── field.zh-CN.md
│   │   │   │   ├── form.md
│   │   │   │   ├── form.zh-CN.md
│   │   │   │   ├── index.md
│   │   │   │   ├── index.zh-CN.md
│   │   │   │   ├── mvvm.md
│   │   │   │   ├── mvvm.zh-CN.md
│   │   │   │   ├── values.md
│   │   │   │   └── values.zh-CN.md
│   │   │   ├── index.md
│   │   │   └── index.zh-CN.md
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── __tests__
│   │   │   │   ├── array.spec.ts
│   │   │   │   ├── effects.spec.ts
│   │   │   │   ├── externals.spec.ts
│   │   │   │   ├── field.spec.ts
│   │   │   │   ├── form.spec.ts
│   │   │   │   ├── graph.spec.ts
│   │   │   │   ├── heart.spec.ts
│   │   │   │   ├── internals.spec.ts
│   │   │   │   ├── lifecycle.spec.ts
│   │   │   │   ├── object.spec.ts
│   │   │   │   ├── shared.ts
│   │   │   │   └── void.spec.ts
│   │   │   ├── effects
│   │   │   │   ├── index.ts
│   │   │   │   ├── onFieldEffects.ts
│   │   │   │   └── onFormEffects.ts
│   │   │   ├── global.d.ts
│   │   │   ├── index.ts
│   │   │   ├── models
│   │   │   │   ├── ArrayField.ts
│   │   │   │   ├── BaseField.ts
│   │   │   │   ├── Field.ts
│   │   │   │   ├── Form.ts
│   │   │   │   ├── Graph.ts
│   │   │   │   ├── Heart.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── LifeCycle.ts
│   │   │   │   ├── ObjectField.ts
│   │   │   │   ├── Query.ts
│   │   │   │   ├── types.ts
│   │   │   │   └── VoidField.ts
│   │   │   ├── shared
│   │   │   │   ├── checkers.ts
│   │   │   │   ├── constants.ts
│   │   │   │   ├── effective.ts
│   │   │   │   ├── externals.ts
│   │   │   │   └── internals.ts
│   │   │   └── types.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── element
│   │   ├── .npmignore
│   │   ├── build-style.ts
│   │   ├── create-style.ts
│   │   ├── docs
│   │   │   ├── .vuepress
│   │   │   │   ├── components
│   │   │   │   │   ├── createCodeSandBox.js
│   │   │   │   │   ├── dumi-previewer.vue
│   │   │   │   │   └── highlight.js
│   │   │   │   ├── config.js
│   │   │   │   ├── enhanceApp.js
│   │   │   │   ├── styles
│   │   │   │   │   └── index.styl
│   │   │   │   └── util.js
│   │   │   ├── demos
│   │   │   │   ├── guide
│   │   │   │   │   ├── array-cards
│   │   │   │   │   │   ├── effects-json-schema.vue
│   │   │   │   │   │   ├── effects-markup-schema.vue
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   └── markup-schema.vue
│   │   │   │   │   ├── array-collapse
│   │   │   │   │   │   ├── effects-json-schema.vue
│   │   │   │   │   │   ├── effects-markup-schema.vue
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   └── markup-schema.vue
│   │   │   │   │   ├── array-items
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   └── markup-schema.vue
│   │   │   │   │   ├── array-table
│   │   │   │   │   │   ├── effects-json-schema.vue
│   │   │   │   │   │   ├── effects-markup-schema.vue
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   └── markup-schema.vue
│   │   │   │   │   ├── array-tabs
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   └── markup-schema.vue
│   │   │   │   │   ├── cascader
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── checkbox
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── date-picker
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── editable
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── form-button-group.vue
│   │   │   │   │   ├── form-collapse
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   └── markup-schema.vue
│   │   │   │   │   ├── form-dialog
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── form-drawer
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── form-grid
│   │   │   │   │   │   ├── form.vue
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── native.vue
│   │   │   │   │   ├── form-item
│   │   │   │   │   │   ├── bordered-none.vue
│   │   │   │   │   │   ├── common.vue
│   │   │   │   │   │   ├── feedback.vue
│   │   │   │   │   │   ├── inset.vue
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   ├── size.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── form-layout
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── form-step
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   └── markup-schema.vue
│   │   │   │   │   ├── form-tab
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   └── markup-schema.vue
│   │   │   │   │   ├── form.vue
│   │   │   │   │   ├── input
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── input-number
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── password
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── preview-text
│   │   │   │   │   │   ├── base.vue
│   │   │   │   │   │   └── extend.vue
│   │   │   │   │   ├── radio
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── reset
│   │   │   │   │   │   ├── base.vue
│   │   │   │   │   │   ├── force.vue
│   │   │   │   │   │   └── validate.vue
│   │   │   │   │   ├── select
│   │   │   │   │   │   ├── json-schema-async.vue
│   │   │   │   │   │   ├── json-schema-sync.vue
│   │   │   │   │   │   ├── markup-schema-async-search.vue
│   │   │   │   │   │   ├── markup-schema-async.vue
│   │   │   │   │   │   ├── markup-schema-sync.vue
│   │   │   │   │   │   ├── template-async.vue
│   │   │   │   │   │   └── template-sync.vue
│   │   │   │   │   ├── space
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── submit
│   │   │   │   │   │   ├── base.vue
│   │   │   │   │   │   └── loading.vue
│   │   │   │   │   ├── switch
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── time-picker
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   ├── transfer
│   │   │   │   │   │   ├── json-schema.vue
│   │   │   │   │   │   ├── markup-schema.vue
│   │   │   │   │   │   └── template.vue
│   │   │   │   │   └── upload
│   │   │   │   │       ├── json-schema.vue
│   │   │   │   │       ├── markup-schema.vue
│   │   │   │   │       └── template.vue
│   │   │   │   └── index.vue
│   │   │   ├── guide
│   │   │   │   ├── array-cards.md
│   │   │   │   ├── array-collapse.md
│   │   │   │   ├── array-items.md
│   │   │   │   ├── array-table.md
│   │   │   │   ├── array-tabs.md
│   │   │   │   ├── cascader.md
│   │   │   │   ├── checkbox.md
│   │   │   │   ├── date-picker.md
│   │   │   │   ├── editable.md
│   │   │   │   ├── form-button-group.md
│   │   │   │   ├── form-collapse.md
│   │   │   │   ├── form-dialog.md
│   │   │   │   ├── form-drawer.md
│   │   │   │   ├── form-grid.md
│   │   │   │   ├── form-item.md
│   │   │   │   ├── form-layout.md
│   │   │   │   ├── form-step.md
│   │   │   │   ├── form-tab.md
│   │   │   │   ├── form.md
│   │   │   │   ├── index.md
│   │   │   │   ├── input-number.md
│   │   │   │   ├── input.md
│   │   │   │   ├── password.md
│   │   │   │   ├── preview-text.md
│   │   │   │   ├── radio.md
│   │   │   │   ├── reset.md
│   │   │   │   ├── select.md
│   │   │   │   ├── space.md
│   │   │   │   ├── submit.md
│   │   │   │   ├── switch.md
│   │   │   │   ├── time-picker.md
│   │   │   │   ├── transfer.md
│   │   │   │   └── upload.md
│   │   │   └── README.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── __builtins__
│   │   │   │   ├── configs
│   │   │   │   │   └── index.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── shared
│   │   │   │   │   ├── create-context.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── loading.ts
│   │   │   │   │   ├── portal.ts
│   │   │   │   │   ├── resolve-component.ts
│   │   │   │   │   ├── transform-component.ts
│   │   │   │   │   ├── types.ts
│   │   │   │   │   └── utils.ts
│   │   │   │   └── styles
│   │   │   │       └── common.scss
│   │   │   ├── array-base
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── array-cards
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── array-collapse
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── array-items
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── array-table
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── array-tabs
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── cascader
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── checkbox
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── date-picker
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── editable
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── el-form
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── el-form-item
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── form
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── form-button-group
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── form-collapse
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── form-dialog
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── form-drawer
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── form-grid
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── form-item
│   │   │   │   ├── animation.scss
│   │   │   │   ├── grid.scss
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   ├── style.ts
│   │   │   │   └── var.scss
│   │   │   ├── form-layout
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   ├── style.ts
│   │   │   │   └── useResponsiveFormLayout.ts
│   │   │   ├── form-step
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── form-tab
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── index.ts
│   │   │   ├── input
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── input-number
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── password
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── preview-text
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── radio
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── reset
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── select
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── space
│   │   │   │   ├── index.ts
│   │   │   │   ├── style.scss
│   │   │   │   └── style.ts
│   │   │   ├── style.ts
│   │   │   ├── submit
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── switch
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── time-picker
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   ├── transfer
│   │   │   │   ├── index.ts
│   │   │   │   └── style.ts
│   │   │   └── upload
│   │   │       ├── index.ts
│   │   │       └── style.ts
│   │   ├── transformer.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── grid
│   │   ├── .npmignore
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── index.ts
│   │   │   └── observer.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── json-schema
│   │   ├── .npmignore
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── __tests__
│   │   │   │   ├── __snapshots__
│   │   │   │   │   └── schema.spec.ts.snap
│   │   │   │   ├── compiler.spec.ts
│   │   │   │   ├── patches.spec.ts
│   │   │   │   ├── schema.spec.ts
│   │   │   │   ├── server-validate.spec.ts
│   │   │   │   ├── shared.spec.ts
│   │   │   │   ├── transformer.spec.ts
│   │   │   │   └── traverse.spec.ts
│   │   │   ├── compiler.ts
│   │   │   ├── global.d.ts
│   │   │   ├── index.ts
│   │   │   ├── patches.ts
│   │   │   ├── polyfills
│   │   │   │   ├── index.ts
│   │   │   │   └── SPECIFICATION_1_0.ts
│   │   │   ├── schema.ts
│   │   │   ├── shared.ts
│   │   │   ├── transformer.ts
│   │   │   └── types.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── next
│   │   ├── __tests__
│   │   │   ├── moment.spec.ts
│   │   │   └── sideEffects.spec.ts
│   │   ├── .npmignore
│   │   ├── .umirc.js
│   │   ├── build-style.ts
│   │   ├── create-style.ts
│   │   ├── docs
│   │   │   ├── components
│   │   │   │   ├── ArrayCards.md
│   │   │   │   ├── ArrayCards.zh-CN.md
│   │   │   │   ├── ArrayCollapse.md
│   │   │   │   ├── ArrayCollapse.zh-CN.md
│   │   │   │   ├── ArrayItems.md
│   │   │   │   ├── ArrayItems.zh-CN.md
│   │   │   │   ├── ArrayTable.md
│   │   │   │   ├── ArrayTable.zh-CN.md
│   │   │   │   ├── Cascader.md
│   │   │   │   ├── Cascader.zh-CN.md
│   │   │   │   ├── Checkbox.md
│   │   │   │   ├── Checkbox.zh-CN.md
│   │   │   │   ├── DatePicker.md
│   │   │   │   ├── DatePicker.zh-CN.md
│   │   │   │   ├── DatePicker2.md
│   │   │   │   ├── DatePicker2.zh-CN.md
│   │   │   │   ├── Editable.md
│   │   │   │   ├── Editable.zh-CN.md
│   │   │   │   ├── Form.md
│   │   │   │   ├── Form.zh-CN.md
│   │   │   │   ├── FormButtonGroup.md
│   │   │   │   ├── FormButtonGroup.zh-CN.md
│   │   │   │   ├── FormCollapse.md
│   │   │   │   ├── FormCollapse.zh-CN.md
│   │   │   │   ├── FormDialog.md
│   │   │   │   ├── FormDialog.zh-CN.md
│   │   │   │   ├── FormDrawer.md
│   │   │   │   ├── FormDrawer.zh-CN.md
│   │   │   │   ├── FormGrid.md
│   │   │   │   ├── FormGrid.zh-CN.md
│   │   │   │   ├── FormItem.md
│   │   │   │   ├── FormItem.zh-CN.md
│   │   │   │   ├── FormLayout.md
│   │   │   │   ├── FormLayout.zh-CN.md
│   │   │   │   ├── FormStep.md
│   │   │   │   ├── FormStep.zh-CN.md
│   │   │   │   ├── FormTab.md
│   │   │   │   ├── FormTab.zh-CN.md
│   │   │   │   ├── index.md
│   │   │   │   ├── index.zh-CN.md
│   │   │   │   ├── Input.md
│   │   │   │   ├── Input.zh-CN.md
│   │   │   │   ├── NumberPicker.md
│   │   │   │   ├── NumberPicker.zh-CN.md
│   │   │   │   ├── Password.md
│   │   │   │   ├── Password.zh-CN.md
│   │   │   │   ├── PreviewText.md
│   │   │   │   ├── PreviewText.zh-CN.md
│   │   │   │   ├── Radio.md
│   │   │   │   ├── Radio.zh-CN.md
│   │   │   │   ├── Reset.md
│   │   │   │   ├── Reset.zh-CN.md
│   │   │   │   ├── Select.md
│   │   │   │   ├── Select.zh-CN.md
│   │   │   │   ├── SelectTable.md
│   │   │   │   ├── SelectTable.zh-CN.md
│   │   │   │   ├── Space.md
│   │   │   │   ├── Space.zh-CN.md
│   │   │   │   ├── Submit.md
│   │   │   │   ├── Submit.zh-CN.md
│   │   │   │   ├── Switch.md
│   │   │   │   ├── Switch.zh-CN.md
│   │   │   │   ├── TimePicker.md
│   │   │   │   ├── TimePicker.zh-CN.md
│   │   │   │   ├── TimePicker2.md
│   │   │   │   ├── TimePicker2.zh-CN.md
│   │   │   │   ├── Transfer.md
│   │   │   │   ├── Transfer.zh-CN.md
│   │   │   │   ├── TreeSelect.md
│   │   │   │   ├── TreeSelect.zh-CN.md
│   │   │   │   ├── Upload.md
│   │   │   │   └── Upload.zh-CN.md
│   │   │   ├── index.md
│   │   │   └── index.zh-CN.md
│   │   ├── LESENCE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── __builtins__
│   │   │   │   ├── empty.tsx
│   │   │   │   ├── hooks
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── useClickAway.ts
│   │   │   │   │   └── usePrefixCls.ts
│   │   │   │   ├── icons.tsx
│   │   │   │   ├── index.ts
│   │   │   │   ├── loading.ts
│   │   │   │   ├── mapSize.ts
│   │   │   │   ├── mapStatus.ts
│   │   │   │   ├── moment.ts
│   │   │   │   ├── pickDataProps.ts
│   │   │   │   ├── portal.tsx
│   │   │   │   ├── render.ts
│   │   │   │   └── toArray.ts
│   │   │   ├── array-base
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── array-cards
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── array-collapse
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── array-items
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── array-table
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── cascader
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── checkbox
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── date-picker
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── date-picker2
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── editable
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── form
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── form-button-group
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── form-collapse
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── form-dialog
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── form-drawer
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── form-grid
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── form-item
│   │   │   │   ├── animation.scss
│   │   │   │   ├── grid.scss
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   ├── scss
│   │   │   │   │   └── variable.scss
│   │   │   │   └── style.ts
│   │   │   ├── form-layout
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   ├── style.ts
│   │   │   │   └── useResponsiveFormLayout.ts
│   │   │   ├── form-step
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── form-tab
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── index.ts
│   │   │   ├── input
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── main.scss
│   │   │   ├── number-picker
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── password
│   │   │   │   ├── index.tsx
│   │   │   │   ├── PasswordStrength.tsx
│   │   │   │   └── style.ts
│   │   │   ├── preview-text
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── radio
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── reset
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── select
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── select-table
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   ├── style.ts
│   │   │   │   ├── useCheckSlackly.tsx
│   │   │   │   ├── useFilterOptions.tsx
│   │   │   │   ├── useFlatOptions.tsx
│   │   │   │   ├── useSize.tsx
│   │   │   │   ├── useTitleAddon.tsx
│   │   │   │   └── utils.ts
│   │   │   ├── space
│   │   │   │   ├── index.tsx
│   │   │   │   ├── main.scss
│   │   │   │   └── style.ts
│   │   │   ├── style.ts
│   │   │   ├── submit
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── switch
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── time-picker
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── time-picker2
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── transfer
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   ├── tree-select
│   │   │   │   ├── index.tsx
│   │   │   │   └── style.ts
│   │   │   └── upload
│   │   │       ├── index.tsx
│   │   │       ├── main.scss
│   │   │       ├── placeholder.ts
│   │   │       └── style.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── path
│   │   ├── .npmignore
│   │   ├── benchmark.ts
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── __tests__
│   │   │   │   ├── accessor.spec.ts
│   │   │   │   ├── basic.spec.ts
│   │   │   │   ├── match.spec.ts
│   │   │   │   ├── parser.spec.ts
│   │   │   │   └── share.spec.ts
│   │   │   ├── contexts.ts
│   │   │   ├── destructor.ts
│   │   │   ├── index.ts
│   │   │   ├── matcher.ts
│   │   │   ├── parser.ts
│   │   │   ├── shared.ts
│   │   │   ├── tokenizer.ts
│   │   │   ├── tokens.ts
│   │   │   └── types.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── react
│   │   ├── .npmignore
│   │   ├── .umirc.js
│   │   ├── docs
│   │   │   ├── api
│   │   │   │   ├── components
│   │   │   │   │   ├── ArrayField.md
│   │   │   │   │   ├── ArrayField.zh-CN.md
│   │   │   │   │   ├── ExpressionScope.md
│   │   │   │   │   ├── ExpressionScope.zh-CN.md
│   │   │   │   │   ├── Field.md
│   │   │   │   │   ├── Field.zh-CN.md
│   │   │   │   │   ├── FormConsumer.md
│   │   │   │   │   ├── FormConsumer.zh-CN.md
│   │   │   │   │   ├── FormProvider.md
│   │   │   │   │   ├── FormProvider.zh-CN.md
│   │   │   │   │   ├── ObjectField.md
│   │   │   │   │   ├── ObjectField.zh-CN.md
│   │   │   │   │   ├── RecordScope.md
│   │   │   │   │   ├── RecordScope.zh-CN.md
│   │   │   │   │   ├── RecordsScope.md
│   │   │   │   │   ├── RecordsScope.zh-CN.md
│   │   │   │   │   ├── RecursionField.md
│   │   │   │   │   ├── RecursionField.zh-CN.md
│   │   │   │   │   ├── SchemaField.md
│   │   │   │   │   ├── SchemaField.zh-CN.md
│   │   │   │   │   ├── VoidField.md
│   │   │   │   │   └── VoidField.zh-CN.md
│   │   │   │   ├── hooks
│   │   │   │   │   ├── useExpressionScope.md
│   │   │   │   │   ├── useExpressionScope.zh-CN.md
│   │   │   │   │   ├── useField.md
│   │   │   │   │   ├── useField.zh-CN.md
│   │   │   │   │   ├── useFieldSchema.md
│   │   │   │   │   ├── useFieldSchema.zh-CN.md
│   │   │   │   │   ├── useForm.md
│   │   │   │   │   ├── useForm.zh-CN.md
│   │   │   │   │   ├── useFormEffects.md
│   │   │   │   │   ├── useFormEffects.zh-CN.md
│   │   │   │   │   ├── useParentForm.md
│   │   │   │   │   └── useParentForm.zh-CN.md
│   │   │   │   └── shared
│   │   │   │       ├── connect.md
│   │   │   │       ├── connect.zh-CN.md
│   │   │   │       ├── context.md
│   │   │   │       ├── context.zh-CN.md
│   │   │   │       ├── mapProps.md
│   │   │   │       ├── mapProps.zh-CN.md
│   │   │   │       ├── mapReadPretty.md
│   │   │   │       ├── mapReadPretty.zh-CN.md
│   │   │   │       ├── observer.md
│   │   │   │       ├── observer.zh-CN.md
│   │   │   │       ├── Schema.md
│   │   │   │       └── Schema.zh-CN.md
│   │   │   ├── guide
│   │   │   │   ├── architecture.md
│   │   │   │   ├── architecture.zh-CN.md
│   │   │   │   ├── concept.md
│   │   │   │   ├── concept.zh-CN.md
│   │   │   │   ├── index.md
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── index.md
│   │   │   └── index.zh-CN.md
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── __tests__
│   │   │   │   ├── expression.spec.tsx
│   │   │   │   ├── field.spec.tsx
│   │   │   │   ├── form.spec.tsx
│   │   │   │   ├── schema.json.spec.tsx
│   │   │   │   ├── schema.markup.spec.tsx
│   │   │   │   └── shared.tsx
│   │   │   ├── components
│   │   │   │   ├── ArrayField.tsx
│   │   │   │   ├── ExpressionScope.tsx
│   │   │   │   ├── Field.tsx
│   │   │   │   ├── FormConsumer.tsx
│   │   │   │   ├── FormProvider.tsx
│   │   │   │   ├── index.ts
│   │   │   │   ├── ObjectField.tsx
│   │   │   │   ├── ReactiveField.tsx
│   │   │   │   ├── RecordScope.tsx
│   │   │   │   ├── RecordsScope.tsx
│   │   │   │   ├── RecursionField.tsx
│   │   │   │   ├── SchemaField.tsx
│   │   │   │   └── VoidField.tsx
│   │   │   ├── global.d.ts
│   │   │   ├── hooks
│   │   │   │   ├── index.ts
│   │   │   │   ├── useAttach.ts
│   │   │   │   ├── useExpressionScope.ts
│   │   │   │   ├── useField.ts
│   │   │   │   ├── useFieldSchema.ts
│   │   │   │   ├── useForm.ts
│   │   │   │   ├── useFormEffects.ts
│   │   │   │   └── useParentForm.ts
│   │   │   ├── index.ts
│   │   │   ├── shared
│   │   │   │   ├── connect.ts
│   │   │   │   ├── context.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── render.ts
│   │   │   └── types.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── reactive
│   │   ├── .npmignore
│   │   ├── .umirc.js
│   │   ├── benchmark.ts
│   │   ├── docs
│   │   │   ├── api
│   │   │   │   ├── action.md
│   │   │   │   ├── action.zh-CN.md
│   │   │   │   ├── autorun.md
│   │   │   │   ├── autorun.zh-CN.md
│   │   │   │   ├── batch.md
│   │   │   │   ├── batch.zh-CN.md
│   │   │   │   ├── define.md
│   │   │   │   ├── define.zh-CN.md
│   │   │   │   ├── hasCollected.md
│   │   │   │   ├── hasCollected.zh-CN.md
│   │   │   │   ├── markObservable.md
│   │   │   │   ├── markObservable.zh-CN.md
│   │   │   │   ├── markRaw.md
│   │   │   │   ├── markRaw.zh-CN.md
│   │   │   │   ├── model.md
│   │   │   │   ├── model.zh-CN.md
│   │   │   │   ├── observable.md
│   │   │   │   ├── observable.zh-CN.md
│   │   │   │   ├── observe.md
│   │   │   │   ├── observe.zh-CN.md
│   │   │   │   ├── raw.md
│   │   │   │   ├── raw.zh-CN.md
│   │   │   │   ├── react
│   │   │   │   │   ├── observer.md
│   │   │   │   │   └── observer.zh-CN.md
│   │   │   │   ├── reaction.md
│   │   │   │   ├── reaction.zh-CN.md
│   │   │   │   ├── toJS.md
│   │   │   │   ├── toJS.zh-CN.md
│   │   │   │   ├── tracker.md
│   │   │   │   ├── tracker.zh-CN.md
│   │   │   │   ├── typeChecker.md
│   │   │   │   ├── typeChecker.zh-CN.md
│   │   │   │   ├── untracked.md
│   │   │   │   ├── untracked.zh-CN.md
│   │   │   │   └── vue
│   │   │   │       ├── observer.md
│   │   │   │       └── observer.zh-CN.md
│   │   │   ├── guide
│   │   │   │   ├── best-practice.md
│   │   │   │   ├── best-practice.zh-CN.md
│   │   │   │   ├── concept.md
│   │   │   │   ├── concept.zh-CN.md
│   │   │   │   ├── index.md
│   │   │   │   └── index.zh-CN.md
│   │   │   ├── index.md
│   │   │   └── index.zh-CN.md
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── __tests__
│   │   │   │   ├── action.spec.ts
│   │   │   │   ├── annotations.spec.ts
│   │   │   │   ├── array.spec.ts
│   │   │   │   ├── autorun.spec.ts
│   │   │   │   ├── batch.spec.ts
│   │   │   │   ├── collections-map.spec.ts
│   │   │   │   ├── collections-set.spec.ts
│   │   │   │   ├── collections-weakmap.spec.ts
│   │   │   │   ├── collections-weakset.spec.ts
│   │   │   │   ├── define.spec.ts
│   │   │   │   ├── externals.spec.ts
│   │   │   │   ├── hasCollected.spec.ts
│   │   │   │   ├── observable.spec.ts
│   │   │   │   ├── observe.spec.ts
│   │   │   │   ├── tracker.spec.ts
│   │   │   │   └── untracked.spec.ts
│   │   │   ├── action.ts
│   │   │   ├── annotations
│   │   │   │   ├── box.ts
│   │   │   │   ├── computed.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── observable.ts
│   │   │   │   ├── ref.ts
│   │   │   │   └── shallow.ts
│   │   │   ├── array.ts
│   │   │   ├── autorun.ts
│   │   │   ├── batch.ts
│   │   │   ├── checkers.ts
│   │   │   ├── environment.ts
│   │   │   ├── externals.ts
│   │   │   ├── global.d.ts
│   │   │   ├── handlers.ts
│   │   │   ├── index.ts
│   │   │   ├── internals.ts
│   │   │   ├── model.ts
│   │   │   ├── observable.ts
│   │   │   ├── observe.ts
│   │   │   ├── reaction.ts
│   │   │   ├── tracker.ts
│   │   │   ├── tree.ts
│   │   │   ├── types.ts
│   │   │   └── untracked.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── reactive-react
│   │   ├── .npmignore
│   │   ├── .umirc.js
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── hooks
│   │   │   │   ├── index.ts
│   │   │   │   ├── useCompatEffect.ts
│   │   │   │   ├── useCompatFactory.ts
│   │   │   │   ├── useDidUpdate.ts
│   │   │   │   ├── useForceUpdate.ts
│   │   │   │   ├── useLayoutEffect.ts
│   │   │   │   └── useObserver.ts
│   │   │   ├── index.ts
│   │   │   ├── observer.ts
│   │   │   ├── shared
│   │   │   │   ├── gc.ts
│   │   │   │   ├── global.ts
│   │   │   │   ├── immediate.ts
│   │   │   │   └── index.ts
│   │   │   └── types.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── reactive-test-cases-for-react18
│   │   ├── .npmignore
│   │   ├── .umirc.js
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── src
│   │   │   ├── index.js
│   │   │   └── MySlowList.js
│   │   ├── template.ejs
│   │   ├── tsconfig.build.json
│   │   ├── tsconfig.json
│   │   ├── webpack.base.ts
│   │   ├── webpack.dev.ts
│   │   └── webpack.prod.ts
│   ├── reactive-vue
│   │   ├── .npmignore
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── __tests__
│   │   │   │   └── observer.spec.ts
│   │   │   ├── hooks
│   │   │   │   ├── index.ts
│   │   │   │   └── useObserver.ts
│   │   │   ├── index.ts
│   │   │   ├── observer
│   │   │   │   ├── collectData.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── observerInVue2.ts
│   │   │   │   └── observerInVue3.ts
│   │   │   └── types.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── shared
│   │   ├── .npmignore
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── __tests__
│   │   │   │   └── index.spec.ts
│   │   │   ├── array.ts
│   │   │   ├── case.ts
│   │   │   ├── checkers.ts
│   │   │   ├── clone.ts
│   │   │   ├── compare.ts
│   │   │   ├── defaults.ts
│   │   │   ├── deprecate.ts
│   │   │   ├── global.ts
│   │   │   ├── index.ts
│   │   │   ├── instanceof.ts
│   │   │   ├── isEmpty.ts
│   │   │   ├── merge.ts
│   │   │   ├── middleware.ts
│   │   │   ├── path.ts
│   │   │   ├── string.ts
│   │   │   ├── subscribable.ts
│   │   │   └── uid.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   ├── validator
│   │   ├── .npmignore
│   │   ├── LICENSE.md
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── rollup.config.js
│   │   ├── src
│   │   │   ├── __tests__
│   │   │   │   ├── parser.spec.ts
│   │   │   │   ├── registry.spec.ts
│   │   │   │   └── validator.spec.ts
│   │   │   ├── formats.ts
│   │   │   ├── index.ts
│   │   │   ├── locale.ts
│   │   │   ├── parser.ts
│   │   │   ├── registry.ts
│   │   │   ├── rules.ts
│   │   │   ├── template.ts
│   │   │   ├── types.ts
│   │   │   └── validator.ts
│   │   ├── tsconfig.build.json
│   │   └── tsconfig.json
│   └── vue
│       ├── .npmignore
│       ├── bin
│       │   ├── formily-vue-fix.js
│       │   └── formily-vue-switch.js
│       ├── docs
│       │   ├── .vuepress
│       │   │   ├── components
│       │   │   │   ├── createCodeSandBox.js
│       │   │   │   ├── dumi-previewer.vue
│       │   │   │   └── highlight.js
│       │   │   ├── config.js
│       │   │   ├── enhanceApp.js
│       │   │   └── styles
│       │   │       └── index.styl
│       │   ├── api
│       │   │   ├── components
│       │   │   │   ├── array-field.md
│       │   │   │   ├── expression-scope.md
│       │   │   │   ├── field.md
│       │   │   │   ├── form-consumer.md
│       │   │   │   ├── form-provider.md
│       │   │   │   ├── object-field.md
│       │   │   │   ├── recursion-field-with-component.md
│       │   │   │   ├── recursion-field.md
│       │   │   │   ├── schema-field-with-schema.md
│       │   │   │   ├── schema-field.md
│       │   │   │   └── void-field.md
│       │   │   ├── hooks
│       │   │   │   ├── use-field-schema.md
│       │   │   │   ├── use-field.md
│       │   │   │   ├── use-form-effects.md
│       │   │   │   ├── use-form.md
│       │   │   │   └── use-parent-form.md
│       │   │   └── shared
│       │   │       ├── connect.md
│       │   │       ├── injections.md
│       │   │       ├── map-props.md
│       │   │       ├── map-read-pretty.md
│       │   │       ├── observer.md
│       │   │       └── schema.md
│       │   ├── demos
│       │   │   ├── api
│       │   │   │   ├── components
│       │   │   │   │   ├── array-field.vue
│       │   │   │   │   ├── expression-scope.vue
│       │   │   │   │   ├── field.vue
│       │   │   │   │   ├── form-consumer.vue
│       │   │   │   │   ├── form-provider.vue
│       │   │   │   │   ├── object-field.vue
│       │   │   │   │   ├── recursion-field-with-component.vue
│       │   │   │   │   ├── recursion-field.vue
│       │   │   │   │   ├── schema-field-with-schema.vue
│       │   │   │   │   ├── schema-field.vue
│       │   │   │   │   └── void-field.vue
│       │   │   │   ├── hooks
│       │   │   │   │   ├── use-field-schema.vue
│       │   │   │   │   ├── use-field.vue
│       │   │   │   │   ├── use-form-effects.vue
│       │   │   │   │   ├── use-form.vue
│       │   │   │   │   └── use-parent-form.vue
│       │   │   │   └── shared
│       │   │   │       ├── connect.vue
│       │   │   │       ├── map-props.vue
│       │   │   │       ├── map-read-pretty.vue
│       │   │   │       └── observer.vue
│       │   │   ├── index.vue
│       │   │   └── questions
│       │   │       ├── default-slot.vue
│       │   │       ├── events.vue
│       │   │       ├── named-slot.vue
│       │   │       └── scoped-slot.vue
│       │   ├── guide
│       │   │   ├── architecture.md
│       │   │   ├── concept.md
│       │   │   └── README.md
│       │   ├── questions
│       │   │   └── README.md
│       │   └── README.md
│       ├── package.json
│       ├── README.md
│       ├── rollup.config.js
│       ├── scripts
│       │   ├── postinstall.js
│       │   ├── switch-cli.js
│       │   └── utils.js
│       ├── src
│       │   ├── __tests__
│       │   │   ├── expression.scope.spec.ts
│       │   │   ├── field.spec.ts
│       │   │   ├── form.spec.ts
│       │   │   ├── schema.json.spec.ts
│       │   │   ├── schema.markup.spec.ts
│       │   │   ├── shared.spec.ts
│       │   │   └── utils.spec.ts
│       │   ├── components
│       │   │   ├── ArrayField.ts
│       │   │   ├── ExpressionScope.ts
│       │   │   ├── Field.ts
│       │   │   ├── FormConsumer.ts
│       │   │   ├── FormProvider.ts
│       │   │   ├── index.ts
│       │   │   ├── ObjectField.ts
│       │   │   ├── ReactiveField.ts
│       │   │   ├── RecursionField.ts
│       │   │   ├── SchemaField.ts
│       │   │   └── VoidField.ts
│       │   ├── global.d.ts
│       │   ├── hooks
│       │   │   ├── index.ts
│       │   │   ├── useAttach.ts
│       │   │   ├── useField.ts
│       │   │   ├── useFieldSchema.ts
│       │   │   ├── useForm.ts
│       │   │   ├── useFormEffects.ts
│       │   │   ├── useInjectionCleaner.ts
│       │   │   └── useParentForm.ts
│       │   ├── index.ts
│       │   ├── shared
│       │   │   ├── connect.ts
│       │   │   ├── context.ts
│       │   │   ├── createForm.ts
│       │   │   ├── fragment.ts
│       │   │   ├── h.ts
│       │   │   └── index.ts
│       │   ├── types
│       │   │   └── index.ts
│       │   ├── utils
│       │   │   ├── formatVNodeData.ts
│       │   │   ├── getFieldProps.ts
│       │   │   ├── getRawComponent.ts
│       │   │   └── resolveSchemaProps.ts
│       │   └── vue2-components.ts
│       ├── tsconfig.build.json
│       ├── tsconfig.json
│       └── tsconfig.types.json
├── README.md
├── README.zh-cn.md
├── scripts
│   ├── build-style
│   │   ├── buildAllStyles.ts
│   │   ├── copy.ts
│   │   ├── helper.ts
│   │   └── index.ts
│   └── rollup.base.js
├── tsconfig.build.json
├── tsconfig.jest.json
├── tsconfig.json
└── yarn.lock
```

# Files

--------------------------------------------------------------------------------
/.yarnrc:
--------------------------------------------------------------------------------

```
1 | registry "https://registry.yarnpkg.com"
```

--------------------------------------------------------------------------------
/.prettierrc.js:
--------------------------------------------------------------------------------

```javascript
1 | module.exports = {
2 |   semi: false,
3 |   tabWidth: 2,
4 |   singleQuote: true,
5 | }
```

--------------------------------------------------------------------------------
/devtools/chrome-extension/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/antd/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/benchmark/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/core/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/grid/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/json-schema/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/next/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/path/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/react/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/reactive-react/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/reactive-test-cases-for-react18/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/reactive-vue/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/reactive/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/shared/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/validator/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | tsconfig.json
10 | .umi
11 | src
```

--------------------------------------------------------------------------------
/packages/element/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | vue.config.js
10 | tsconfig.json
11 | .umi
12 | src
```

--------------------------------------------------------------------------------
/packages/vue/.npmignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | *.log
 3 | build
 4 | docs
 5 | doc-site
 6 | __tests__
 7 | .eslintrc
 8 | jest.config.js
 9 | vue.config.js
10 | tsconfig.json
11 | .umi
12 | src
```

--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------

```
 1 | node_modules
 2 | lib
 3 | dist
 4 | build
 5 | coverage
 6 | expected
 7 | website
 8 | gh-pages
 9 | weex
10 | build.ts
11 | packages/vue
12 | packages/element
13 | esm
14 | doc-site
15 | public
16 | package
```

--------------------------------------------------------------------------------
/.codecov.yml:
--------------------------------------------------------------------------------

```yaml
 1 | coverage:
 2 |   status:
 3 |     project:
 4 |       default:
 5 |         threshold: 0.1%
 6 |     patch:
 7 |       default:
 8 |         threshold: 0.1%
 9 |         target: 95%
10 | 
```

--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------

```
 1 | # EditorConfig is awesome: http://EditorConfig.org
 2 | 
 3 | # top-most EditorConfig file
 4 | root = true
 5 | 
 6 | # Unix-style newlines with a newline ending every file
 7 | [*]
 8 | end_of_line = lf
 9 | insert_final_newline = true
10 | indent_style = space
11 | indent_size = 2
12 | 
13 | [*.gradle]
14 | indent_size = 4
```

--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------

```
 1 | *~
 2 | *.swp
 3 | .DS_Store
 4 | .tea
 5 | npm-debug.log
 6 | lerna-debug.log
 7 | npm-debug.log*
 8 | package-lock.json
 9 | lib/
10 | esm/
11 | temp_esm/
12 | dist/
13 | type-artefacts/
14 | build/
15 | coverage/
16 | node_modules/
17 | examples/test
18 | .idea/
19 | TODO.md
20 | tsconfig.tsbuildinfo
21 | package/
22 | package.zip
23 | .umi
24 | .umi-production
25 | .cjsescache
26 | doc-site
27 | .lerna-changelog
28 | .history
29 | .lint-report.log
30 | 
```

--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------

```
 1 | {
 2 |   "env": {
 3 |     "node": true
 4 |   },
 5 |   "extends": [
 6 |     "plugin:react/recommended",
 7 |     "plugin:@typescript-eslint/recommended",
 8 |     "prettier/@typescript-eslint"
 9 |   ],
10 |   "globals": {
11 |     "sleep": true,
12 |     "prettyFormat": true
13 |   },
14 |   "parserOptions": {
15 |     "ecmaVersion": 10,
16 |     "sourceType": "module",
17 |     "ecmaFeatures": {
18 |       "jsx": true
19 |     }
20 |   },
21 |   "parser": "@typescript-eslint/parser",
22 |   "plugins": ["@typescript-eslint", "react", "prettier", "markdown"],
23 |   "settings": {
24 |     "react": {
25 |       "version": "detect"
26 |     }
27 |   },
28 |   "rules": {
29 |     "@typescript-eslint/explicit-module-boundary-types": "off",
30 |     "@typescript-eslint/no-var-requires": "off",
31 |     "@typescript-eslint/no-explicit-any": "off",
32 |     "@typescript-eslint/no-unused-vars": "error",
33 |     "@typescript-eslint/ban-ts-comment": "off",
34 |     "react/no-unescaped-entities": "off",
35 |     "react/prop-types": "off"
36 |   },
37 |   "overrides": [
38 |     {
39 |       "files": ["**/*.md"],
40 |       "processor": "markdown/markdown"
41 |     },
42 |     {
43 |       "files": ["**/*.md/*.{jsx,tsx}"],
44 |       "rules": {
45 |         "@typescript-eslint/no-unused-vars": "error",
46 |         "no-unused-vars": "error",
47 |         "no-console": "off",
48 |         "react/display-name": "off",
49 |         "react/prop-types": "off"
50 |       }
51 |     },
52 |     {
53 |       "files": ["**/*.md/*.{js,ts}"],
54 |       "rules": {
55 |         "@typescript-eslint/no-unused-vars": "off",
56 |         "no-unused-vars": "off",
57 |         "no-console": "off",
58 |         "react/display-name": "off",
59 |         "react/prop-types": "off"
60 |       }
61 |     }
62 |   ]
63 | }
64 | 
```

--------------------------------------------------------------------------------
/packages/benchmark/.umirc.js:
--------------------------------------------------------------------------------

```javascript
 1 | import { resolve } from 'path'
 2 | export default {
 3 |   mode: 'site',
 4 |   logo: '//img.alicdn.com/imgextra/i2/O1CN01Kq3OHU1fph6LGqjIz_!!6000000004056-55-tps-1141-150.svg',
 5 |   title: 'Formily',
 6 |   hash: true,
 7 |   favicon:
 8 |     '//img.alicdn.com/imgextra/i3/O1CN01XtT3Tv1Wd1b5hNVKy_!!6000000002810-55-tps-360-360.svg',
 9 |   outputPath: './doc-site',
10 |   navs: {
11 |     'en-US': [
12 |       {
13 |         title: 'Guide',
14 |         path: '/guide',
15 |       },
16 |       {
17 |         title: 'API',
18 |         path: '/api',
19 |       },
20 |       {
21 |         title: 'Home Site',
22 |         path: 'https://formilyjs.org',
23 |       },
24 |       {
25 |         title: 'GITHUB',
26 |         path: 'https://github.com/alibaba/formily',
27 |       },
28 |     ],
29 |     'zh-CN': [
30 |       {
31 |         title: '指南',
32 |         path: '/zh-CN/guide',
33 |       },
34 |       {
35 |         title: 'API',
36 |         path: '/zh-CN/api',
37 |       },
38 |       {
39 |         title: '主站',
40 |         path: 'https://formilyjs.org',
41 |       },
42 |       {
43 |         title: 'GITHUB',
44 |         path: 'https://github.com/alibaba/formily',
45 |       },
46 |     ],
47 |   },
48 |   links: [
49 |     {
50 |       rel: 'stylesheet',
51 |       href: 'https://esm.sh/[email protected]/dist/antd.css',
52 |     },
53 |   ],
54 |   styles: [
55 |     `.__dumi-default-navbar-logo{
56 |       height: 60px !important;
57 |       width: 150px !important;
58 |       padding-left:0 !important;
59 |       color: transparent !important;
60 |     }
61 |     .__dumi-default-navbar{
62 |       padding: 0 28px !important;
63 |     }
64 |     .__dumi-default-layout-hero{
65 |       background-image: url(//img.alicdn.com/imgextra/i4/O1CN01ZcvS4e26XMsdsCkf9_!!6000000007671-2-tps-6001-4001.png);
66 |       background-size: cover;
67 |       background-repeat: no-repeat;
68 |     }
69 |     nav a{
70 |       text-decoration: none !important;
71 |     }
72 |     `,
73 |   ],
74 |   menus: {
75 |     '/guide': [
76 |       {
77 |         title: 'Introduction',
78 |         path: '/guide',
79 |       },
80 |       { title: 'Architecture', path: '/guide/architecture' },
81 |       { title: 'Concept', path: '/guide/concept' },
82 |     ],
83 |     '/zh-CN/guide': [
84 |       {
85 |         title: '介绍',
86 |         path: '/guide',
87 |       },
88 |       { title: '核心架构', path: '/zh-CN/guide/architecture' },
89 |       { title: '核心概念', path: '/zh-CN/guide/concept' },
90 |     ],
91 |   },
92 | }
93 | 
```

--------------------------------------------------------------------------------
/packages/reactive-test-cases-for-react18/.umirc.js:
--------------------------------------------------------------------------------

```javascript
 1 | import { resolve } from 'path'
 2 | export default {
 3 |   mode: 'site',
 4 |   logo: '//img.alicdn.com/imgextra/i2/O1CN01Kq3OHU1fph6LGqjIz_!!6000000004056-55-tps-1141-150.svg',
 5 |   title: 'Formily',
 6 |   hash: true,
 7 |   favicon:
 8 |     '//img.alicdn.com/imgextra/i3/O1CN01XtT3Tv1Wd1b5hNVKy_!!6000000002810-55-tps-360-360.svg',
 9 |   outputPath: './doc-site',
10 |   navs: {
11 |     'en-US': [
12 |       {
13 |         title: 'Guide',
14 |         path: '/guide',
15 |       },
16 |       {
17 |         title: 'API',
18 |         path: '/api',
19 |       },
20 |       {
21 |         title: 'Home Site',
22 |         path: 'https://formilyjs.org',
23 |       },
24 |       {
25 |         title: 'GITHUB',
26 |         path: 'https://github.com/alibaba/formily',
27 |       },
28 |     ],
29 |     'zh-CN': [
30 |       {
31 |         title: '指南',
32 |         path: '/zh-CN/guide',
33 |       },
34 |       {
35 |         title: 'API',
36 |         path: '/zh-CN/api',
37 |       },
38 |       {
39 |         title: '主站',
40 |         path: 'https://formilyjs.org',
41 |       },
42 |       {
43 |         title: 'GITHUB',
44 |         path: 'https://github.com/alibaba/formily',
45 |       },
46 |     ],
47 |   },
48 |   links: [
49 |     {
50 |       rel: 'stylesheet',
51 |       href: 'https://esm.sh/[email protected]/dist/antd.css',
52 |     },
53 |   ],
54 |   styles: [
55 |     `.__dumi-default-navbar-logo{
56 |       height: 60px !important;
57 |       width: 150px !important;
58 |       padding-left:0 !important;
59 |       color: transparent !important;
60 |     }
61 |     .__dumi-default-navbar{
62 |       padding: 0 28px !important;
63 |     }
64 |     .__dumi-default-layout-hero{
65 |       background-image: url(//img.alicdn.com/imgextra/i4/O1CN01ZcvS4e26XMsdsCkf9_!!6000000007671-2-tps-6001-4001.png);
66 |       background-size: cover;
67 |       background-repeat: no-repeat;
68 |     }
69 |     nav a{
70 |       text-decoration: none !important;
71 |     }
72 |     `,
73 |   ],
74 |   menus: {
75 |     '/guide': [
76 |       {
77 |         title: 'Introduction',
78 |         path: '/guide',
79 |       },
80 |       { title: 'Architecture', path: '/guide/architecture' },
81 |       { title: 'Concept', path: '/guide/concept' },
82 |     ],
83 |     '/zh-CN/guide': [
84 |       {
85 |         title: '介绍',
86 |         path: '/guide',
87 |       },
88 |       { title: '核心架构', path: '/zh-CN/guide/architecture' },
89 |       { title: '核心概念', path: '/zh-CN/guide/concept' },
90 |     ],
91 |   },
92 | }
93 | 
```

--------------------------------------------------------------------------------
/.all-contributorsrc:
--------------------------------------------------------------------------------

```
 1 | {
 2 |   "projectName": "formily",
 3 |   "projectOwner": "alibaba",
 4 |   "repoType": "github",
 5 |   "repoHost": "https://github.com",
 6 |   "files": [
 7 |     "README.md"
 8 |   ],
 9 |   "imageSize": 100,
10 |   "commit": false,
11 |   "contributors": [
12 |     {
13 |       "login": "janryWang",
14 |       "name": "Janry",
15 |       "avatar_url": "https://avatars0.githubusercontent.com/u/4060976?v=4",
16 |       "profile": "https://github.com/janryWang",
17 |       "contributions": [
18 |         "design"
19 |       ]
20 |     },
21 |     {
22 |       "login": "cnt1992",
23 |       "name": "SkyCai",
24 |       "avatar_url": "https://avatars1.githubusercontent.com/u/3118988?v=4",
25 |       "profile": "http://cnt1992.github.io",
26 |       "contributions": [
27 |         "design"
28 |       ]
29 |     },
30 |     {
31 |       "login": "yujiangshui",
32 |       "name": "Harry Yu",
33 |       "avatar_url": "https://avatars3.githubusercontent.com/u/2942913?v=4",
34 |       "profile": "https://www.linkedin.com/in/harry-yu-0a931a69/",
35 |       "contributions": [
36 |         "doc",
37 |         "code"
38 |       ]
39 |     },
40 |     {
41 |       "login": "zsirfs",
42 |       "name": "zsir",
43 |       "avatar_url": "https://avatars2.githubusercontent.com/u/22249411?v=4",
44 |       "profile": "https://www.luoyangfu.com",
45 |       "contributions": [
46 |         "code"
47 |       ]
48 |     },
49 |     {
50 |       "login": "monkindey",
51 |       "name": "Kiho · Cham",
52 |       "avatar_url": "https://avatars0.githubusercontent.com/u/6913898?v=4",
53 |       "profile": "http://www.monkindey.xyz/",
54 |       "contributions": [
55 |         "code",
56 |         "doc"
57 |       ]
58 |     },
59 |     {
60 |       "login": "whj1995",
61 |       "name": "Hongjiang Wu",
62 |       "avatar_url": "https://avatars2.githubusercontent.com/u/22634735?v=4",
63 |       "profile": "http://whj1995.xyz",
64 |       "contributions": [
65 |         "doc"
66 |       ]
67 |     },
68 |     {
69 |       "login": "anyuxuan",
70 |       "name": "合木",
71 |       "avatar_url": "https://avatars3.githubusercontent.com/u/24931869?v=4",
72 |       "profile": "https://github.com/anyuxuan",
73 |       "contributions": [
74 |         "code"
75 |       ]
76 |     },
77 |     {
78 |       "login": "Azath0th",
79 |       "name": "Chen YuBen",
80 |       "avatar_url": "https://avatars2.githubusercontent.com/u/18497361?v=4",
81 |       "profile": "https://github.com/Azath0th",
82 |       "contributions": [
83 |         "code"
84 |       ]
85 |     },
86 |     {
87 |       "login": "HarrisFeng",
88 |       "name": "Harris Feng",
89 |       "avatar_url": "https://avatars1.githubusercontent.com/u/7928957?v=4",
90 |       "profile": "https://github.com/HarrisFeng",
91 |       "contributions": [
92 |         "code"
93 |       ]
94 |     }
95 |   ],
96 |   "contributorsPerLine": 7
97 | }
98 | 
```

--------------------------------------------------------------------------------
/devtools/.eslintrc:
--------------------------------------------------------------------------------

```
 1 | {
 2 |   "parser": "@typescript-eslint/parser",
 3 |   "extends": [
 4 |     "plugin:react/recommended",
 5 |     "plugin:@typescript-eslint/recommended",
 6 |     "prettier/@typescript-eslint"
 7 |   ],
 8 |   "env": {
 9 |     "node": true
10 |   },
11 |   "plugins": ["@typescript-eslint", "react", "prettier", "markdown"],
12 |   "parserOptions": {
13 |     "sourceType": "module",
14 |     "ecmaVersion": 10,
15 |     "ecmaFeatures": {
16 |       "jsx": true
17 |     }
18 |   },
19 |   "settings": {
20 |     "react": {
21 |       "version": "detect"
22 |     }
23 |   },
24 |   "rules": {
25 |     "prettier/prettier": 0,
26 |     // don't force es6 functions to include space before paren
27 |     "space-before-function-paren": 0,
28 |     "react/prop-types": 0,
29 |     "react/no-find-dom-node": 0,
30 |     "react/display-name": 0,
31 |     // allow specifying true explicitly for boolean props
32 |     "react/jsx-boolean-value": 0,
33 |     "react/no-did-update-set-state": 0,
34 |     // maybe we should no-public
35 |     "@typescript-eslint/explicit-member-accessibility": 0,
36 |     "@typescript-eslint/interface-name-prefix": 0,
37 |     "@typescript-eslint/no-explicit-any": 0,
38 |     "@typescript-eslint/explicit-function-return-type": 0,
39 |     "@typescript-eslint/no-parameter-properties": 0,
40 |     "@typescript-eslint/array-type": 0,
41 |     "@typescript-eslint/no-object-literal-type-assertion": 0,
42 |     "@typescript-eslint/no-use-before-define": 0,
43 |     "@typescript-eslint/no-unused-vars": 1,
44 |     "@typescript-eslint/no-namespace": 0,
45 |     "@typescript-eslint/ban-types": 0,
46 |     "@typescript-eslint/adjacent-overload-signatures": 0,
47 |     "@typescript-eslint/explicit-module-boundary-types": 0,
48 |     "@typescript-eslint/triple-slash-reference": 0,
49 |     "@typescript-eslint/no-empty-function": 0,
50 |     "no-console": [
51 |       "error",
52 |       {
53 |         "allow": ["warn", "error", "info"]
54 |       }
55 |     ],
56 |     "prefer-const": 0,
57 |     "no-var": 1,
58 |     "prefer-rest-params": 0
59 |   },
60 |   "overrides": [
61 |     {
62 |       "files": ["**/*.md.{jsx,tsx}"],
63 |       "processor": "markdown/markdown"
64 |     },
65 |     {
66 |       "files": ["**/*.md/*.{jsx,tsx}"],
67 |       "rules": {
68 |         "@typescript-eslint/no-unused-vars": "error",
69 |         "no-unused-vars": "error",
70 |         "no-console": "off",
71 |         "react/display-name": "off",
72 |         "react/prop-types": "off"
73 |       }
74 |     },
75 |     {
76 |       "files": ["**/*.md/*.{js,ts}"],
77 |       "rules": {
78 |         "@typescript-eslint/no-unused-vars": "off",
79 |         "no-unused-vars": "off",
80 |         "no-console": "off",
81 |         "react/display-name": "off",
82 |         "react/prop-types": "off"
83 |       }
84 |     }
85 |   ]
86 | }
87 | 
```

--------------------------------------------------------------------------------
/packages/.eslintrc:
--------------------------------------------------------------------------------

```
 1 | {
 2 |   "parser": "@typescript-eslint/parser",
 3 |   "extends": [
 4 |     "plugin:react/recommended",
 5 |     "plugin:@typescript-eslint/recommended",
 6 |     "prettier/@typescript-eslint"
 7 |   ],
 8 |   "env": {
 9 |     "node": true
10 |   },
11 |   "plugins": ["@typescript-eslint", "react", "prettier", "markdown"],
12 |   "parserOptions": {
13 |     "sourceType": "module",
14 |     "ecmaVersion": 10,
15 |     "ecmaFeatures": {
16 |       "jsx": true
17 |     }
18 |   },
19 |   "settings": {
20 |     "react": {
21 |       "version": "detect"
22 |     }
23 |   },
24 |   "rules": {
25 |     "prettier/prettier": 0,
26 |     // don't force es6 functions to include space before paren
27 |     "space-before-function-paren": 0,
28 |     "react/prop-types": 0,
29 |     "react/no-find-dom-node": 0,
30 |     "react/display-name": 0,
31 |     // allow specifying true explicitly for boolean props
32 |     "react/jsx-boolean-value": 0,
33 |     "react/no-did-update-set-state": 0,
34 |     "react/no-unescaped-entities": "off",
35 |     // maybe we should no-public
36 |     "@typescript-eslint/explicit-member-accessibility": 0,
37 |     "@typescript-eslint/interface-name-prefix": 0,
38 |     "@typescript-eslint/no-explicit-any": 0,
39 |     "@typescript-eslint/explicit-function-return-type": 0,
40 |     "@typescript-eslint/no-parameter-properties": 0,
41 |     "@typescript-eslint/array-type": 0,
42 |     "@typescript-eslint/no-object-literal-type-assertion": 0,
43 |     "@typescript-eslint/no-use-before-define": 0,
44 |     "@typescript-eslint/no-unused-vars": 1,
45 |     "@typescript-eslint/no-namespace": 0,
46 |     "@typescript-eslint/ban-ts-comment": 0,
47 |     "@typescript-eslint/ban-types": 0,
48 |     "@typescript-eslint/adjacent-overload-signatures": 0,
49 |     "@typescript-eslint/explicit-module-boundary-types": 0,
50 |     "@typescript-eslint/triple-slash-reference": 0,
51 |     "@typescript-eslint/no-empty-function": 0,
52 |     "no-console": [
53 |       "error",
54 |       {
55 |         "allow": ["warn", "error", "info"]
56 |       }
57 |     ],
58 |     "prefer-const": 0,
59 |     "no-var": 1,
60 |     "prefer-rest-params": 0
61 |   },
62 |   "overrides": [
63 |     {
64 |       "files": ["**/*.md.{jsx,tsx}"],
65 |       "processor": "markdown/markdown"
66 |     },
67 |     {
68 |       "files": ["**/*.md/*.{jsx,tsx}"],
69 |       "rules": {
70 |         "@typescript-eslint/no-unused-vars": "error",
71 |         "no-unused-vars": "error",
72 |         "no-console": "off",
73 |         "react/display-name": "off",
74 |         "react/prop-types": "off"
75 |       }
76 |     },
77 |     {
78 |       "files": ["**/*.md/*.{js,ts}"],
79 |       "rules": {
80 |         "@typescript-eslint/no-unused-vars": "off",
81 |         "no-unused-vars": "off",
82 |         "no-console": "off",
83 |         "react/display-name": "off",
84 |         "react/prop-types": "off"
85 |       }
86 |     }
87 |   ]
88 | }
89 | 
```

--------------------------------------------------------------------------------
/packages/reactive-react/.umirc.js:
--------------------------------------------------------------------------------

```javascript
  1 | import { resolve } from 'path'
  2 | export default {
  3 |   mode: 'doc',
  4 |   logo: 'https://img.alicdn.com/imgextra/i2/O1CN01Kq3OHU1fph6LGqjIz_!!6000000004056-55-tps-1141-150.svg',
  5 |   title: 'Formily',
  6 |   hash: true,
  7 |   favicon:
  8 |     '//img.alicdn.com/imgextra/i3/O1CN01XtT3Tv1Wd1b5hNVKy_!!6000000002810-55-tps-360-360.svg',
  9 |   outputPath: './doc-site',
 10 |   headScripts: [
 11 |     `
 12 |     function loadAd(){
 13 |       var header = document.querySelector('.__dumi-default-layout-content .markdown h1')
 14 |       if(header && !header.querySelector('#_carbonads_js')){
 15 |         var script = document.createElement('script')
 16 |         script.src = '//cdn.carbonads.com/carbon.js?serve=CEAICK3M&placement=formilyjsorg'
 17 |         script.id = '_carbonads_js'
 18 |         script.classList.add('head-ad')
 19 |         header.appendChild(script)
 20 |       }
 21 |     }
 22 |     var request = null
 23 |     var observer = new MutationObserver(function(){
 24 |       cancelIdleCallback(request)
 25 |       request = requestIdleCallback(loadAd)
 26 |     })
 27 |     document.addEventListener('DOMContentLoaded',function(){
 28 |       loadAd()
 29 |       observer.observe(
 30 |         document.body,
 31 |         {
 32 |           childList:true,
 33 |           subtree:true
 34 |         }
 35 |       )
 36 |     })
 37 |     `,
 38 |   ],
 39 |   styles: [
 40 |     `.__dumi-default-navbar-logo{
 41 |       background-size: 140px!important;
 42 |       background-position: center left!important;
 43 |       background-repeat: no-repeat!important;
 44 |       padding-left: 150px!important;/*可根据title的宽度调整*/
 45 |       font-size: 22px!important;
 46 |       color: #000!important;
 47 |       font-weight: lighter!important;
 48 |     }
 49 |     .__dumi-default-navbar{
 50 |       padding: 0 28px !important;
 51 |     }
 52 |     .__dumi-default-layout-hero{
 53 |       background-image: url(//img.alicdn.com/imgextra/i4/O1CN01ZcvS4e26XMsdsCkf9_!!6000000007671-2-tps-6001-4001.png);
 54 |       background-size: cover;
 55 |       background-repeat: no-repeat;
 56 |       padding: 120px 0 !important;
 57 |     }
 58 |     .__dumi-default-layout-hero h1{
 59 |       color:#45124e !important;
 60 |       font-size:80px !important;
 61 |       padding-bottom: 30px !important;
 62 |     }
 63 |     .__dumi-default-dark-switch {
 64 |       display:none
 65 |     }
 66 |     nav a{
 67 |       text-decoration: none !important;
 68 |     }
 69 |     #carbonads * {
 70 |       margin: initial;
 71 |       padding: initial;
 72 |     }
 73 |     #carbonads {
 74 |       font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
 75 |         Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', Helvetica, Arial,
 76 |         sans-serif;
 77 |     }
 78 |     #carbonads {
 79 |       display: flex;
 80 |       max-width: 330px;
 81 |       background-color: hsl(0, 0%, 98%);
 82 |       box-shadow: 0 1px 4px 1px hsla(0, 0%, 0%, 0.1);
 83 |       z-index: 100;
 84 |       float:right;
 85 |     }
 86 |     #carbonads a {
 87 |       color: inherit;
 88 |       text-decoration: none;
 89 |     }
 90 |     #carbonads a:hover {
 91 |       color: inherit;
 92 |     }
 93 |     #carbonads span {
 94 |       position: relative;
 95 |       display: block;
 96 |       overflow: hidden;
 97 |     }
 98 |     #carbonads .carbon-wrap {
 99 |       display: flex;
100 |     }
101 |     #carbonads .carbon-img {
102 |       display: block;
103 |       margin: 0;
104 |       line-height: 1;
105 |     }
106 |     #carbonads .carbon-img img {
107 |       display: block;
108 |     }
109 |     #carbonads .carbon-text {
110 |       font-size: 13px;
111 |       padding: 10px;
112 |       margin-bottom: 16px;
113 |       line-height: 1.5;
114 |       text-align: left;
115 |     }
116 |     #carbonads .carbon-poweredby {
117 |       display: block;
118 |       padding: 6px 8px;
119 |       background: #f1f1f2;
120 |       text-align: center;
121 |       text-transform: uppercase;
122 |       letter-spacing: 0.5px;
123 |       font-weight: 600;
124 |       font-size: 8px;
125 |       line-height: 1;
126 |       border-top-left-radius: 3px;
127 |       position: absolute;
128 |       bottom: 0;
129 |       right: 0;
130 |     }
131 |     `,
132 |   ],
133 | }
134 | 
```

--------------------------------------------------------------------------------
/packages/antd/.umirc.js:
--------------------------------------------------------------------------------

```javascript
  1 | import { resolve } from 'path'
  2 | export default {
  3 |   mode: 'site',
  4 |   logo: '//img.alicdn.com/imgextra/i2/O1CN01Kq3OHU1fph6LGqjIz_!!6000000004056-55-tps-1141-150.svg',
  5 |   title: 'Ant Design',
  6 |   hash: true,
  7 |   favicon:
  8 |     '//img.alicdn.com/imgextra/i3/O1CN01XtT3Tv1Wd1b5hNVKy_!!6000000002810-55-tps-360-360.svg',
  9 |   outputPath: './doc-site',
 10 |   locales: [
 11 |     ['en-US', 'English'],
 12 |     ['zh-CN', '中文'],
 13 |   ],
 14 |   navs: {
 15 |     'zh-CN': [
 16 |       {
 17 |         title: 'Ant Design',
 18 |         path: '/zh-CN/components',
 19 |       },
 20 |       {
 21 |         title: '主站',
 22 |         path: 'https://formilyjs.org',
 23 |       },
 24 |       {
 25 |         title: 'GITHUB',
 26 |         path: 'https://github.com/alibaba/formily',
 27 |       },
 28 |     ],
 29 |     'en-US': [
 30 |       {
 31 |         title: 'Ant Design',
 32 |         path: '/components',
 33 |       },
 34 |       {
 35 |         title: 'Home Site',
 36 |         path: 'https://formilyjs.org',
 37 |       },
 38 |       {
 39 |         title: 'GITHUB',
 40 |         path: 'https://github.com/alibaba/formily',
 41 |       },
 42 |     ],
 43 |   },
 44 |   links: [
 45 |     {
 46 |       rel: 'stylesheet',
 47 |       href: 'https://esm.sh/[email protected]/dist/antd.css',
 48 |     },
 49 |   ],
 50 |   headScripts: [
 51 |     `
 52 |     function loadAd(){
 53 |       var header = document.querySelector('.__dumi-default-layout-content .markdown h1')
 54 |       if(header && !header.querySelector('#_carbonads_js')){
 55 |         var script = document.createElement('script')
 56 |         script.src = '//cdn.carbonads.com/carbon.js?serve=CEAICK3M&placement=formilyjsorg'
 57 |         script.id = '_carbonads_js'
 58 |         script.classList.add('head-ad')
 59 |         header.appendChild(script)
 60 |       }
 61 |     }
 62 |     var request = null
 63 |     var observer = new MutationObserver(function(){
 64 |       cancelIdleCallback(request)
 65 |       request = requestIdleCallback(loadAd)
 66 |     })
 67 |     document.addEventListener('DOMContentLoaded',function(){
 68 |       loadAd()
 69 |       observer.observe(
 70 |         document.body,
 71 |         {
 72 |           childList:true,
 73 |           subtree:true
 74 |         }
 75 |       )
 76 |     })
 77 |     `,
 78 |   ],
 79 |   styles: [
 80 |     `.__dumi-default-navbar-logo{
 81 |       height: 60px !important;
 82 |       width: 150px !important;
 83 |       padding-left:0 !important;
 84 |       color: transparent !important;
 85 |     }
 86 |     .__dumi-default-navbar{
 87 |       padding: 0 28px !important;
 88 |     }
 89 |     .__dumi-default-layout-hero{
 90 |       background-image: url(//img.alicdn.com/imgextra/i4/O1CN01ZcvS4e26XMsdsCkf9_!!6000000007671-2-tps-6001-4001.png);
 91 |       background-size: cover;
 92 |       background-repeat: no-repeat;
 93 |       padding: 120px 0 !important;
 94 |     }
 95 |     .__dumi-default-layout-hero h1{
 96 |       color:#45124e !important;
 97 |       font-size:80px !important;
 98 |       padding-bottom: 30px !important;
 99 |     }
100 |     .__dumi-default-dark-switch {
101 |       display:none
102 |     }
103 |     nav a{
104 |       text-decoration: none !important;
105 |     }
106 |     #carbonads * {
107 |       margin: initial;
108 |       padding: initial;
109 |     }
110 |     #carbonads {
111 |       font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
112 |         Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', Helvetica, Arial,
113 |         sans-serif;
114 |     }
115 |     #carbonads {
116 |       display: flex;
117 |       max-width: 330px;
118 |       background-color: hsl(0, 0%, 98%);
119 |       box-shadow: 0 1px 4px 1px hsla(0, 0%, 0%, 0.1);
120 |       z-index: 100;
121 |       float:right;
122 |     }
123 |     #carbonads a {
124 |       color: inherit;
125 |       text-decoration: none;
126 |     }
127 |     #carbonads a:hover {
128 |       color: inherit;
129 |     }
130 |     #carbonads span {
131 |       position: relative;
132 |       display: block;
133 |       overflow: hidden;
134 |     }
135 |     #carbonads .carbon-wrap {
136 |       display: flex;
137 |     }
138 |     #carbonads .carbon-img {
139 |       display: block;
140 |       margin: 0;
141 |       line-height: 1;
142 |     }
143 |     #carbonads .carbon-img img {
144 |       display: block;
145 |     }
146 |     #carbonads .carbon-text {
147 |       font-size: 13px;
148 |       padding: 10px;
149 |       margin-bottom: 16px;
150 |       line-height: 1.5;
151 |       text-align: left;
152 |     }
153 |     #carbonads .carbon-poweredby {
154 |       display: block;
155 |       padding: 6px 8px;
156 |       background: #f1f1f2;
157 |       text-align: center;
158 |       text-transform: uppercase;
159 |       letter-spacing: 0.5px;
160 |       font-weight: 600;
161 |       font-size: 8px;
162 |       line-height: 1;
163 |       border-top-left-radius: 3px;
164 |       position: absolute;
165 |       bottom: 0;
166 |       right: 0;
167 |     }
168 |     `,
169 |   ],
170 | }
171 | 
```

--------------------------------------------------------------------------------
/packages/next/.umirc.js:
--------------------------------------------------------------------------------

```javascript
  1 | import { resolve } from 'path'
  2 | export default {
  3 |   mode: 'site',
  4 |   logo: '//img.alicdn.com/imgextra/i2/O1CN01Kq3OHU1fph6LGqjIz_!!6000000004056-55-tps-1141-150.svg',
  5 |   title: 'Fusion',
  6 |   favicon:
  7 |     '//img.alicdn.com/imgextra/i3/O1CN01XtT3Tv1Wd1b5hNVKy_!!6000000002810-55-tps-360-360.svg',
  8 |   hash: true,
  9 |   outputPath: './doc-site',
 10 |   navs: {
 11 |     'en-US': [
 12 |       {
 13 |         title: 'Alibaba Fusion',
 14 |         path: '/components',
 15 |       },
 16 |       {
 17 |         title: 'Home Site',
 18 |         path: 'https://formilyjs.org',
 19 |       },
 20 |       {
 21 |         title: 'GITHUB',
 22 |         path: 'https://github.com/alibaba/formily',
 23 |       },
 24 |     ],
 25 |     'zh-CN': [
 26 |       {
 27 |         title: 'Alibaba Fusion',
 28 |         path: '/zh-CN/components',
 29 |       },
 30 |       {
 31 |         title: '主站',
 32 |         path: 'https://formilyjs.org',
 33 |       },
 34 |       {
 35 |         title: 'GITHUB',
 36 |         path: 'https://github.com/alibaba/formily',
 37 |       },
 38 |     ],
 39 |   },
 40 |   links: [
 41 |     {
 42 |       rel: 'stylesheet',
 43 |       href: 'https://esm.sh/@alifd/next/dist/next-noreset.css',
 44 |     },
 45 |   ],
 46 |   headScripts: [
 47 |     `
 48 |     function loadAd(){
 49 |       var header = document.querySelector('.__dumi-default-layout-content .markdown h1')
 50 |       if(header && !header.querySelector('#_carbonads_js')){
 51 |         var script = document.createElement('script')
 52 |         script.src = '//cdn.carbonads.com/carbon.js?serve=CEAICK3M&placement=formilyjsorg'
 53 |         script.id = '_carbonads_js'
 54 |         script.classList.add('head-ad')
 55 |         header.appendChild(script)
 56 |       }
 57 |     }
 58 |     var request = null
 59 |     var observer = new MutationObserver(function(){
 60 |       cancelIdleCallback(request)
 61 |       request = requestIdleCallback(loadAd)
 62 |     })
 63 |     document.addEventListener('DOMContentLoaded',function(){
 64 |       loadAd()
 65 |       observer.observe(
 66 |         document.body,
 67 |         {
 68 |           childList:true,
 69 |           subtree:true
 70 |         }
 71 |       )
 72 |     })
 73 |     `,
 74 |   ],
 75 |   styles: [
 76 |     `.__dumi-default-navbar-logo{
 77 |       background-size: 140px!important;
 78 |       background-position: center left!important;
 79 |       background-repeat: no-repeat!important;
 80 |       padding-left: 150px!important;/*可根据title的宽度调整*/
 81 |       font-size: 22px!important;
 82 |       color: #000!important;
 83 |       font-weight: lighter!important;
 84 |     }
 85 |     .__dumi-default-navbar{
 86 |       padding: 0 28px !important;
 87 |     }
 88 |     .__dumi-default-layout-hero{
 89 |       background-image: url(//img.alicdn.com/imgextra/i4/O1CN01ZcvS4e26XMsdsCkf9_!!6000000007671-2-tps-6001-4001.png);
 90 |       background-size: cover;
 91 |       background-repeat: no-repeat;
 92 |       padding: 120px 0 !important;
 93 |     }
 94 |     .__dumi-default-layout-hero h1{
 95 |       color:#45124e !important;
 96 |       font-size:80px !important;
 97 |       padding-bottom: 30px !important;
 98 |     }
 99 |     .__dumi-default-dark-switch {
100 |       display:none
101 |     }
102 |     nav a{
103 |       text-decoration: none !important;
104 |     }
105 |     #carbonads * {
106 |       margin: initial;
107 |       padding: initial;
108 |     }
109 |     #carbonads {
110 |       font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
111 |         Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', Helvetica, Arial,
112 |         sans-serif;
113 |     }
114 |     #carbonads {
115 |       display: flex;
116 |       max-width: 330px;
117 |       background-color: hsl(0, 0%, 98%);
118 |       box-shadow: 0 1px 4px 1px hsla(0, 0%, 0%, 0.1);
119 |       z-index: 100;
120 |       float:right;
121 |     }
122 |     #carbonads a {
123 |       color: inherit;
124 |       text-decoration: none;
125 |     }
126 |     #carbonads a:hover {
127 |       color: inherit;
128 |     }
129 |     #carbonads span {
130 |       position: relative;
131 |       display: block;
132 |       overflow: hidden;
133 |     }
134 |     #carbonads .carbon-wrap {
135 |       display: flex;
136 |     }
137 |     #carbonads .carbon-img {
138 |       display: block;
139 |       margin: 0;
140 |       line-height: 1;
141 |     }
142 |     #carbonads .carbon-img img {
143 |       display: block;
144 |     }
145 |     #carbonads .carbon-text {
146 |       font-size: 13px;
147 |       padding: 10px;
148 |       margin-bottom: 16px;
149 |       line-height: 1.5;
150 |       text-align: left;
151 |     }
152 |     #carbonads .carbon-poweredby {
153 |       display: block;
154 |       padding: 6px 8px;
155 |       background: #f1f1f2;
156 |       text-align: center;
157 |       text-transform: uppercase;
158 |       letter-spacing: 0.5px;
159 |       font-weight: 600;
160 |       font-size: 8px;
161 |       line-height: 1;
162 |       border-top-left-radius: 3px;
163 |       position: absolute;
164 |       bottom: 0;
165 |       right: 0;
166 |     }
167 |     `,
168 |   ],
169 | }
170 | 
```

--------------------------------------------------------------------------------
/packages/react/.umirc.js:
--------------------------------------------------------------------------------

```javascript
  1 | import { resolve } from 'path'
  2 | export default {
  3 |   mode: 'site',
  4 |   logo: '//img.alicdn.com/imgextra/i2/O1CN01Kq3OHU1fph6LGqjIz_!!6000000004056-55-tps-1141-150.svg',
  5 |   title: 'React',
  6 |   hash: true,
  7 |   favicon:
  8 |     '//img.alicdn.com/imgextra/i3/O1CN01XtT3Tv1Wd1b5hNVKy_!!6000000002810-55-tps-360-360.svg',
  9 |   outputPath: './doc-site',
 10 |   navs: {
 11 |     'en-US': [
 12 |       {
 13 |         title: 'Guide',
 14 |         path: '/guide',
 15 |       },
 16 |       {
 17 |         title: 'API',
 18 |         path: '/api',
 19 |       },
 20 |       {
 21 |         title: 'Home Site',
 22 |         path: 'https://formilyjs.org',
 23 |       },
 24 |       {
 25 |         title: 'GITHUB',
 26 |         path: 'https://github.com/alibaba/formily',
 27 |       },
 28 |     ],
 29 |     'zh-CN': [
 30 |       {
 31 |         title: '指南',
 32 |         path: '/zh-CN/guide',
 33 |       },
 34 |       {
 35 |         title: 'API',
 36 |         path: '/zh-CN/api',
 37 |       },
 38 |       {
 39 |         title: '主站',
 40 |         path: 'https://formilyjs.org',
 41 |       },
 42 |       {
 43 |         title: 'GITHUB',
 44 |         path: 'https://github.com/alibaba/formily',
 45 |       },
 46 |     ],
 47 |   },
 48 |   links: [
 49 |     {
 50 |       rel: 'stylesheet',
 51 |       href: 'https://esm.sh/[email protected]/dist/antd.css',
 52 |     },
 53 |   ],
 54 |   headScripts: [
 55 |     `
 56 |     function loadAd(){
 57 |       var header = document.querySelector('.__dumi-default-layout-content .markdown h1')
 58 |       if(header && !header.querySelector('#_carbonads_js')){
 59 |         var script = document.createElement('script')
 60 |         script.src = '//cdn.carbonads.com/carbon.js?serve=CEAICK3M&placement=formilyjsorg'
 61 |         script.id = '_carbonads_js'
 62 |         script.classList.add('head-ad')
 63 |         header.appendChild(script)
 64 |       }
 65 |     }
 66 |     var request = null
 67 |     var observer = new MutationObserver(function(){
 68 |       cancelIdleCallback(request)
 69 |       request = requestIdleCallback(loadAd)
 70 |     })
 71 |     document.addEventListener('DOMContentLoaded',function(){
 72 |       loadAd()
 73 |       observer.observe(
 74 |         document.body,
 75 |         {
 76 |           childList:true,
 77 |           subtree:true
 78 |         }
 79 |       )
 80 |     })
 81 |     `,
 82 |   ],
 83 |   styles: [
 84 |     `.__dumi-default-navbar-logo{
 85 |       background-size: 140px!important;
 86 |       background-position: center left!important;
 87 |       background-repeat: no-repeat!important;
 88 |       padding-left: 150px!important;/*可根据title的宽度调整*/
 89 |       font-size: 22px!important;
 90 |       color: #000!important;
 91 |       font-weight: lighter!important;
 92 |     }
 93 |     .__dumi-default-navbar{
 94 |       padding: 0 28px !important;
 95 |     }
 96 |     .__dumi-default-layout-hero{
 97 |       background-image: url(//img.alicdn.com/imgextra/i4/O1CN01ZcvS4e26XMsdsCkf9_!!6000000007671-2-tps-6001-4001.png);
 98 |       background-size: cover;
 99 |       background-repeat: no-repeat;
100 |       padding: 120px 0 !important;
101 |     }
102 |     .__dumi-default-layout-hero h1{
103 |       color:#45124e !important;
104 |       font-size:80px !important;
105 |       padding-bottom: 30px !important;
106 |     }
107 |     .__dumi-default-dark-switch {
108 |       display:none
109 |     }
110 |     nav a{
111 |       text-decoration: none !important;
112 |     }
113 |     #carbonads * {
114 |       margin: initial;
115 |       padding: initial;
116 |     }
117 |     #carbonads {
118 |       font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
119 |         Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', Helvetica, Arial,
120 |         sans-serif;
121 |     }
122 |     #carbonads {
123 |       display: flex;
124 |       max-width: 330px;
125 |       background-color: hsl(0, 0%, 98%);
126 |       box-shadow: 0 1px 4px 1px hsla(0, 0%, 0%, 0.1);
127 |       z-index: 100;
128 |       float:right;
129 |     }
130 |     #carbonads a {
131 |       color: inherit;
132 |       text-decoration: none;
133 |     }
134 |     #carbonads a:hover {
135 |       color: inherit;
136 |     }
137 |     #carbonads span {
138 |       position: relative;
139 |       display: block;
140 |       overflow: hidden;
141 |     }
142 |     #carbonads .carbon-wrap {
143 |       display: flex;
144 |     }
145 |     #carbonads .carbon-img {
146 |       display: block;
147 |       margin: 0;
148 |       line-height: 1;
149 |     }
150 |     #carbonads .carbon-img img {
151 |       display: block;
152 |     }
153 |     #carbonads .carbon-text {
154 |       font-size: 13px;
155 |       padding: 10px;
156 |       margin-bottom: 16px;
157 |       line-height: 1.5;
158 |       text-align: left;
159 |     }
160 |     #carbonads .carbon-poweredby {
161 |       display: block;
162 |       padding: 6px 8px;
163 |       background: #f1f1f2;
164 |       text-align: center;
165 |       text-transform: uppercase;
166 |       letter-spacing: 0.5px;
167 |       font-weight: 600;
168 |       font-size: 8px;
169 |       line-height: 1;
170 |       border-top-left-radius: 3px;
171 |       position: absolute;
172 |       bottom: 0;
173 |       right: 0;
174 |     }
175 |     `,
176 |   ],
177 |   menus: {
178 |     '/guide': [
179 |       {
180 |         title: 'Introduction',
181 |         path: '/guide',
182 |       },
183 |       { title: 'Architecture', path: '/guide/architecture' },
184 |       { title: 'Concept', path: '/guide/concept' },
185 |     ],
186 |     '/zh-CN/guide': [
187 |       {
188 |         title: '介绍',
189 |         path: '/guide',
190 |       },
191 |       { title: '核心架构', path: '/zh-CN/guide/architecture' },
192 |       { title: '核心概念', path: '/zh-CN/guide/concept' },
193 |     ],
194 |   },
195 | }
196 | 
```

--------------------------------------------------------------------------------
/packages/core/.umirc.js:
--------------------------------------------------------------------------------

```javascript
  1 | import { resolve } from 'path'
  2 | export default {
  3 |   mode: 'site',
  4 |   logo: 'https://img.alicdn.com/imgextra/i2/O1CN01Kq3OHU1fph6LGqjIz_!!6000000004056-55-tps-1141-150.svg',
  5 |   title: 'Core',
  6 |   hash: true,
  7 |   favicon:
  8 |     'https://img.alicdn.com/imgextra/i3/O1CN01XtT3Tv1Wd1b5hNVKy_!!6000000002810-55-tps-360-360.svg',
  9 |   outputPath: './doc-site',
 10 |   navs: {
 11 |     'en-US': [
 12 |       {
 13 |         title: 'Guide',
 14 |         path: '/guide',
 15 |       },
 16 |       {
 17 |         title: 'API',
 18 |         path: '/api',
 19 |       },
 20 |       {
 21 |         title: 'Home Site',
 22 |         path: 'https://formilyjs.org',
 23 |       },
 24 |       {
 25 |         title: 'GITHUB',
 26 |         path: 'https://github.com/alibaba/formily',
 27 |       },
 28 |     ],
 29 |     'zh-CN': [
 30 |       {
 31 |         title: '指南',
 32 |         path: '/zh-CN/guide',
 33 |       },
 34 |       {
 35 |         title: 'API',
 36 |         path: '/zh-CN/api',
 37 |       },
 38 |       {
 39 |         title: '主站',
 40 |         path: 'https://formilyjs.org',
 41 |       },
 42 |       {
 43 |         title: 'GITHUB',
 44 |         path: 'https://github.com/alibaba/formily',
 45 |       },
 46 |     ],
 47 |   },
 48 |   headScripts: [
 49 |     `
 50 |     function loadAd(){
 51 |       var header = document.querySelector('.__dumi-default-layout-content .markdown h1')
 52 |       if(header && !header.querySelector('#_carbonads_js')){
 53 |         var script = document.createElement('script')
 54 |         script.src = '//cdn.carbonads.com/carbon.js?serve=CEAICK3M&placement=formilyjsorg'
 55 |         script.id = '_carbonads_js'
 56 |         script.classList.add('head-ad')
 57 |         header.appendChild(script)
 58 |       }
 59 |     }
 60 |     var request = null
 61 |     var observer = new MutationObserver(function(){
 62 |       cancelIdleCallback(request)
 63 |       request = requestIdleCallback(loadAd)
 64 |     })
 65 |     document.addEventListener('DOMContentLoaded',function(){
 66 |       loadAd()
 67 |       observer.observe(
 68 |         document.body,
 69 |         {
 70 |           childList:true,
 71 |           subtree:true
 72 |         }
 73 |       )
 74 |     })
 75 |     `,
 76 |   ],
 77 |   styles: [
 78 |     `.__dumi-default-navbar-logo{
 79 |       background-size: 140px!important;
 80 |       background-position: center left!important;
 81 |       background-repeat: no-repeat!important;
 82 |       padding-left: 150px!important;/*可根据title的宽度调整*/
 83 |       font-size: 22px!important;
 84 |       color: #000!important;
 85 |       font-weight: lighter!important;
 86 |     }
 87 |     .__dumi-default-navbar{
 88 |       padding: 0 28px !important;
 89 |     }
 90 |     .__dumi-default-layout-hero{
 91 |       background-image: url(//img.alicdn.com/imgextra/i4/O1CN01ZcvS4e26XMsdsCkf9_!!6000000007671-2-tps-6001-4001.png);
 92 |       background-size: cover;
 93 |       background-repeat: no-repeat;
 94 |       padding: 120px 0 !important;
 95 |     }
 96 |     .__dumi-default-layout-hero h1{
 97 |       color:#45124e !important;
 98 |       font-size:80px !important;
 99 |       padding-bottom: 30px !important;
100 |     }
101 |     .__dumi-default-dark-switch {
102 |       display:none
103 |     }
104 |     nav a{
105 |       text-decoration: none !important;
106 |     }
107 |     #carbonads * {
108 |       margin: initial;
109 |       padding: initial;
110 |     }
111 |     #carbonads {
112 |       font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
113 |         Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', Helvetica, Arial,
114 |         sans-serif;
115 |     }
116 |     #carbonads {
117 |       display: flex;
118 |       max-width: 330px;
119 |       background-color: hsl(0, 0%, 98%);
120 |       box-shadow: 0 1px 4px 1px hsla(0, 0%, 0%, 0.1);
121 |       z-index: 100;
122 |       float:right;
123 |     }
124 |     #carbonads a {
125 |       color: inherit;
126 |       text-decoration: none;
127 |     }
128 |     #carbonads a:hover {
129 |       color: inherit;
130 |     }
131 |     #carbonads span {
132 |       position: relative;
133 |       display: block;
134 |       overflow: hidden;
135 |     }
136 |     #carbonads .carbon-wrap {
137 |       display: flex;
138 |     }
139 |     #carbonads .carbon-img {
140 |       display: block;
141 |       margin: 0;
142 |       line-height: 1;
143 |     }
144 |     #carbonads .carbon-img img {
145 |       display: block;
146 |     }
147 |     #carbonads .carbon-text {
148 |       font-size: 13px;
149 |       padding: 10px;
150 |       margin-bottom: 16px;
151 |       line-height: 1.5;
152 |       text-align: left;
153 |     }
154 |     #carbonads .carbon-poweredby {
155 |       display: block;
156 |       padding: 6px 8px;
157 |       background: #f1f1f2;
158 |       text-align: center;
159 |       text-transform: uppercase;
160 |       letter-spacing: 0.5px;
161 |       font-weight: 600;
162 |       font-size: 8px;
163 |       line-height: 1;
164 |       border-top-left-radius: 3px;
165 |       position: absolute;
166 |       bottom: 0;
167 |       right: 0;
168 |     }
169 |     `,
170 |   ],
171 |   menus: {
172 |     '/guide': [
173 |       {
174 |         title: 'Introduction',
175 |         children: [
176 |           {
177 |             title: 'Introduction',
178 |             path: '/guide',
179 |           },
180 |           { title: 'Architecture', path: '/guide/architecture' },
181 |         ],
182 |       },
183 |       {
184 |         title: 'Concept',
185 |         children: [
186 |           {
187 |             title: 'MVVM',
188 |             path: '/guide/mvvm',
189 |           },
190 |           {
191 |             title: 'Form Model',
192 |             path: '/guide/form',
193 |           },
194 |           {
195 |             title: 'Field Model',
196 |             path: '/guide/field',
197 |           },
198 |         ],
199 |       },
200 |     ],
201 | 
202 |     '/zh-CN/guide': [
203 |       {
204 |         title: '概览',
205 |         children: [
206 |           {
207 |             title: '介绍',
208 |             path: '/zh-CN/guide',
209 |           },
210 |           { title: '核心架构', path: '/zh-CN/guide/architecture' },
211 |         ],
212 |       },
213 |       {
214 |         title: '概念',
215 |         children: [
216 |           {
217 |             title: 'MVVM',
218 |             path: '/zh-CN/guide/mvvm',
219 |           },
220 |           {
221 |             title: '表单模型',
222 |             path: '/zh-CN/guide/form',
223 |           },
224 |           {
225 |             title: '字段模型',
226 |             path: '/zh-CN/guide/field',
227 |           },
228 |         ],
229 |       },
230 |     ],
231 |   },
232 | }
233 | 
```

--------------------------------------------------------------------------------
/packages/reactive/.umirc.js:
--------------------------------------------------------------------------------

```javascript
  1 | import { resolve } from 'path'
  2 | export default {
  3 |   mode: 'site',
  4 |   logo: '//img.alicdn.com/imgextra/i2/O1CN01Kq3OHU1fph6LGqjIz_!!6000000004056-55-tps-1141-150.svg',
  5 |   title: 'Reactive',
  6 |   hash: true,
  7 |   favicon:
  8 |     '//img.alicdn.com/imgextra/i3/O1CN01XtT3Tv1Wd1b5hNVKy_!!6000000002810-55-tps-360-360.svg',
  9 |   outputPath: './doc-site',
 10 |   navs: {
 11 |     'en-US': [
 12 |       {
 13 |         title: 'Guide',
 14 |         path: '/guide',
 15 |       },
 16 |       {
 17 |         title: 'API',
 18 |         path: '/api',
 19 |       },
 20 |       {
 21 |         title: 'Home Site',
 22 |         path: 'https://formilyjs.org',
 23 |       },
 24 |       {
 25 |         title: 'GITHUB',
 26 |         path: 'https://github.com/alibaba/formily',
 27 |       },
 28 |     ],
 29 |     'zh-CN': [
 30 |       {
 31 |         title: '指南',
 32 |         path: '/zh-CN/guide',
 33 |       },
 34 |       {
 35 |         title: 'API',
 36 |         path: '/zh-CN/api',
 37 |       },
 38 |       {
 39 |         title: '主站',
 40 |         path: 'https://formilyjs.org',
 41 |       },
 42 |       {
 43 |         title: 'GITHUB',
 44 |         path: 'https://github.com/alibaba/formily',
 45 |       },
 46 |     ],
 47 |   },
 48 |   headScripts: [
 49 |     `
 50 |     function loadAd(){
 51 |       var header = document.querySelector('.__dumi-default-layout-content .markdown h1')
 52 |       if(header && !header.querySelector('#_carbonads_js')){
 53 |         var script = document.createElement('script')
 54 |         script.src = '//cdn.carbonads.com/carbon.js?serve=CEAICK3M&placement=formilyjsorg'
 55 |         script.id = '_carbonads_js'
 56 |         script.classList.add('head-ad')
 57 |         header.appendChild(script)
 58 |       }
 59 |     }
 60 |     var request = null
 61 |     var observer = new MutationObserver(function(){
 62 |       cancelIdleCallback(request)
 63 |       request = requestIdleCallback(loadAd)
 64 |     })
 65 |     document.addEventListener('DOMContentLoaded',function(){
 66 |       loadAd()
 67 |       observer.observe(
 68 |         document.body,
 69 |         {
 70 |           childList:true,
 71 |           subtree:true
 72 |         }
 73 |       )
 74 |     })
 75 |     `,
 76 |   ],
 77 |   styles: [
 78 |     `.__dumi-default-navbar-logo{
 79 |       background-size: 140px!important;
 80 |       background-position: center left!important;
 81 |       background-repeat: no-repeat!important;
 82 |       padding-left: 150px!important;/*可根据title的宽度调整*/
 83 |       font-size: 22px!important;
 84 |       color: #000!important;
 85 |       font-weight: lighter!important;
 86 |     }
 87 |     .__dumi-default-navbar{
 88 |       padding: 0 28px !important;
 89 |     }
 90 |     .__dumi-default-layout-hero{
 91 |       background-image: url(//img.alicdn.com/imgextra/i4/O1CN01ZcvS4e26XMsdsCkf9_!!6000000007671-2-tps-6001-4001.png);
 92 |       background-size: cover;
 93 |       background-repeat: no-repeat;
 94 |       padding: 120px 0 !important;
 95 |     }
 96 |     .__dumi-default-layout-hero h1{
 97 |       color:#45124e !important;
 98 |       font-size:80px !important;
 99 |       padding-bottom: 30px !important;
100 |     }
101 |     .__dumi-default-dark-switch {
102 |       display:none
103 |     }
104 |     nav a{
105 |       text-decoration: none !important;
106 |     }
107 |     #carbonads * {
108 |       margin: initial;
109 |       padding: initial;
110 |     }
111 |     #carbonads {
112 |       font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
113 |         Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', Helvetica, Arial,
114 |         sans-serif;
115 |     }
116 |     #carbonads {
117 |       display: flex;
118 |       max-width: 330px;
119 |       background-color: hsl(0, 0%, 98%);
120 |       box-shadow: 0 1px 4px 1px hsla(0, 0%, 0%, 0.1);
121 |       z-index: 100;
122 |       float:right;
123 |     }
124 |     #carbonads a {
125 |       color: inherit;
126 |       text-decoration: none;
127 |     }
128 |     #carbonads a:hover {
129 |       color: inherit;
130 |     }
131 |     #carbonads span {
132 |       position: relative;
133 |       display: block;
134 |       overflow: hidden;
135 |     }
136 |     #carbonads .carbon-wrap {
137 |       display: flex;
138 |     }
139 |     #carbonads .carbon-img {
140 |       display: block;
141 |       margin: 0;
142 |       line-height: 1;
143 |     }
144 |     #carbonads .carbon-img img {
145 |       display: block;
146 |     }
147 |     #carbonads .carbon-text {
148 |       font-size: 13px;
149 |       padding: 10px;
150 |       margin-bottom: 16px;
151 |       line-height: 1.5;
152 |       text-align: left;
153 |     }
154 |     #carbonads .carbon-poweredby {
155 |       display: block;
156 |       padding: 6px 8px;
157 |       background: #f1f1f2;
158 |       text-align: center;
159 |       text-transform: uppercase;
160 |       letter-spacing: 0.5px;
161 |       font-weight: 600;
162 |       font-size: 8px;
163 |       line-height: 1;
164 |       border-top-left-radius: 3px;
165 |       position: absolute;
166 |       bottom: 0;
167 |       right: 0;
168 |     }
169 |     `,
170 |   ],
171 |   menus: {
172 |     '/guide': [
173 |       {
174 |         title: 'Introduction',
175 |         path: '/guide',
176 |       },
177 |       { title: 'Concept', path: '/guide/concept' },
178 |       {
179 |         title: 'Best Practice',
180 |         path: '/guide/best-practice',
181 |       },
182 |     ],
183 |     '/api': [
184 |       {
185 |         title: '@formily/reactive',
186 |         children: [
187 |           {
188 |             title: 'observable',
189 |             path: '/api/observable',
190 |           },
191 |           {
192 |             title: 'autorun',
193 |             path: '/api/autorun',
194 |           },
195 |           {
196 |             title: 'reaction',
197 |             path: '/api/reaction',
198 |           },
199 | 
200 |           {
201 |             title: 'batch',
202 |             path: '/api/batch',
203 |           },
204 |           {
205 |             title: 'action',
206 |             path: '/api/action',
207 |           },
208 |           {
209 |             title: 'define',
210 |             path: '/api/define',
211 |           },
212 |           {
213 |             title: 'model',
214 |             path: '/api/model',
215 |           },
216 |           {
217 |             title: 'observe',
218 |             path: '/api/observe',
219 |           },
220 |           {
221 |             title: 'markRaw',
222 |             path: '/api/mark-raw',
223 |           },
224 |           {
225 |             title: 'markObservable',
226 |             path: '/api/mark-observable',
227 |           },
228 |           {
229 |             title: 'raw',
230 |             path: '/api/raw',
231 |           },
232 |           {
233 |             title: 'toJS',
234 |             path: '/api/to-js',
235 |           },
236 |           {
237 |             title: 'untracked',
238 |             path: '/api/untracked',
239 |           },
240 |           {
241 |             title: 'hasCollected',
242 |             path: '/api/has-collected',
243 |           },
244 |           {
245 |             title: 'Tracker',
246 |             path: '/api/tracker',
247 |           },
248 |           {
249 |             title: 'Type Chekcer',
250 |             path: '/api/type-checker',
251 |           },
252 |         ],
253 |       },
254 |       {
255 |         title: '@formily/reactive-react',
256 |         children: [
257 |           {
258 |             title: 'observer',
259 |             path: '/api/react/observer',
260 |           },
261 |         ],
262 |       },
263 |       {
264 |         title: '@formily/reactive-vue',
265 |         children: [
266 |           {
267 |             title: 'observer',
268 |             path: '/api/vue/observer',
269 |           },
270 |         ],
271 |       },
272 |     ],
273 |     '/zh-CN/guide': [
274 |       {
275 |         title: '介绍',
276 |         path: '/zh-CN/guide',
277 |       },
278 |       { title: '核心概念', path: '/zh-CN/guide/concept' },
279 |       {
280 |         title: '最佳实践',
281 |         path: '/zh-CN/guide/best-practice',
282 |       },
283 |     ],
284 |     '/zh-CN/api': [
285 |       {
286 |         title: '@formily/reactive',
287 |         children: [
288 |           {
289 |             title: 'observable',
290 |             path: '/zh-CN/api/observable',
291 |           },
292 |           {
293 |             title: 'autorun',
294 |             path: '/zh-CN/api/autorun',
295 |           },
296 |           {
297 |             title: 'reaction',
298 |             path: '/zh-CN/api/reaction',
299 |           },
300 | 
301 |           {
302 |             title: 'batch',
303 |             path: '/zh-CN/api/batch',
304 |           },
305 |           {
306 |             title: 'action',
307 |             path: '/zh-CN/api/action',
308 |           },
309 |           {
310 |             title: 'define',
311 |             path: '/zh-CN/api/define',
312 |           },
313 |           {
314 |             title: 'model',
315 |             path: '/zh-CN/api/model',
316 |           },
317 |           {
318 |             title: 'observe',
319 |             path: '/zh-CN/api/observe',
320 |           },
321 |           {
322 |             title: 'markRaw',
323 |             path: '/zh-CN/api/mark-raw',
324 |           },
325 |           {
326 |             title: 'markObservable',
327 |             path: '/zh-CN/api/mark-observable',
328 |           },
329 |           {
330 |             title: 'raw',
331 |             path: '/zh-CN/api/raw',
332 |           },
333 |           {
334 |             title: 'toJS',
335 |             path: '/zh-CN/api/to-js',
336 |           },
337 |           {
338 |             title: 'untracked',
339 |             path: '/zh-CN/api/untracked',
340 |           },
341 |           {
342 |             title: 'hasCollected',
343 |             path: '/zh-CN/api/has-collected',
344 |           },
345 |           {
346 |             title: 'Tracker',
347 |             path: '/zh-CN/api/tracker',
348 |           },
349 |           {
350 |             title: 'Type Chekcer',
351 |             path: '/zh-CN/api/type-checker',
352 |           },
353 |         ],
354 |       },
355 |       {
356 |         title: '@formily/reactive-react',
357 |         children: [
358 |           {
359 |             title: 'observer',
360 |             path: '/zh-CN/api/react/observer',
361 |           },
362 |         ],
363 |       },
364 |       {
365 |         title: '@formily/reactive-vue',
366 |         children: [
367 |           {
368 |             title: 'observer',
369 |             path: '/zh-CN/api/vue/observer',
370 |           },
371 |         ],
372 |       },
373 |     ],
374 |   },
375 | }
376 | 
```

--------------------------------------------------------------------------------
/.umirc.js:
--------------------------------------------------------------------------------

```javascript
  1 | export default {
  2 |   mode: 'site',
  3 |   logo: '//img.alicdn.com/imgextra/i2/O1CN01Kq3OHU1fph6LGqjIz_!!6000000004056-55-tps-1141-150.svg',
  4 |   title: 'Formily',
  5 |   hash: true,
  6 |   favicon:
  7 |     '//img.alicdn.com/imgextra/i3/O1CN01XtT3Tv1Wd1b5hNVKy_!!6000000002810-55-tps-360-360.svg',
  8 |   outputPath: './doc-site',
  9 |   locales: [
 10 |     ['en-US', 'English'],
 11 |     ['zh-CN', '中文'],
 12 |   ],
 13 |   navs: {
 14 |     'en-US': [
 15 |       {
 16 |         title: 'Guide',
 17 |         path: '/guide',
 18 |       },
 19 |       {
 20 |         title: 'Basic Core Library',
 21 |         children: [
 22 |           {
 23 |             title: '@formily/reactive',
 24 |             path: 'https://reactive.formilyjs.org',
 25 |           },
 26 |           {
 27 |             title: '@formily/core',
 28 |             path: 'https://core.formilyjs.org',
 29 |           },
 30 |           {
 31 |             title: '@formily/react',
 32 |             path: 'https://react.formilyjs.org',
 33 |           },
 34 |           {
 35 |             title: '@formily/vue',
 36 |             path: 'https://vue.formilyjs.org',
 37 |           },
 38 |         ],
 39 |       },
 40 |       {
 41 |         title: 'Component Ecology',
 42 |         children: [
 43 |           {
 44 |             title: '@formily/antd',
 45 |             path: 'https://antd.formilyjs.org',
 46 |           },
 47 |           {
 48 |             title: '@formily/antd-v5',
 49 |             path: 'https://antd5.formilyjs.org',
 50 |           },
 51 |           {
 52 |             title: '@formily/antd-mobile',
 53 |             path: 'https://antd-mobile.formilyjs.org',
 54 |           },
 55 |           {
 56 |             title: '@formily/next',
 57 |             path: 'https://fusion.formilyjs.org',
 58 |           },
 59 |           {
 60 |             title: '@formily/element',
 61 |             path: 'https://element.formilyjs.org',
 62 |           },
 63 |           {
 64 |             title: '@formily/element-plus',
 65 |             path: 'https://element-plus.formilyjs.org',
 66 |           },
 67 |           {
 68 |             title: '@formily/antdv',
 69 |             path: 'https://antdv.formilyjs.org',
 70 |           },
 71 |           {
 72 |             title: '@formily/antdv-x3',
 73 |             path: 'https://antdv-x3.formilyjs.org',
 74 |           },
 75 |           {
 76 |             title: '@formily/vant',
 77 |             path: 'https://vant.formilyjs.org',
 78 |           },
 79 |           {
 80 |             title: '@formily/semi',
 81 |             path: 'https://semi.formilyjs.org',
 82 |           },
 83 |           {
 84 |             title: '@formily/tdesign-react',
 85 |             path: 'https://tdesign-react.formilyjs.org/',
 86 |           },
 87 |           {
 88 |             title: 'aliyun teamix',
 89 |             path: 'https://formily.dg.aliyun-inc.com/',
 90 |           },
 91 |           {
 92 |             title: 'antd-formily-boost',
 93 |             path: 'https://github.com/fishedee/antd-formily-boost',
 94 |           },
 95 |         ],
 96 |       },
 97 |       {
 98 |         title: 'Tools',
 99 |         children: [
100 |           {
101 |             title: 'Formily Designer',
102 |             path: 'https://designable-antd.formilyjs.org/',
103 |           },
104 |           {
105 |             title: 'Designable',
106 |             path: 'https://github.com/alibaba/designable',
107 |           },
108 |           {
109 |             title: 'Chrome Extension',
110 |             path: 'https://chrome.google.com/webstore/detail/formily-devtools/kkocalmbfnplecdmbadaapgapdioecfm?hl=zh-CN',
111 |           },
112 |         ],
113 |       },
114 |       {
115 |         title: 'Community',
116 |         children: [
117 |           {
118 |             title: 'Forum',
119 |             path: 'https://github.com/alibaba/formily/discussions',
120 |           },
121 |           { title: 'Zhihu', path: 'https://www.zhihu.com/column/uform' },
122 |         ],
123 |       },
124 |       {
125 |         title: '[email protected]',
126 |         path: 'https://v1.formilyjs.org',
127 |       },
128 |       {
129 |         title: 'GITHUB',
130 |         path: 'https://github.com/alibaba/formily',
131 |       },
132 |     ],
133 |     'zh-CN': [
134 |       {
135 |         title: '指南',
136 |         path: '/zh-CN/guide',
137 |       },
138 |       {
139 |         title: '基础核心库',
140 |         children: [
141 |           {
142 |             title: '@formily/reactive',
143 |             path: 'https://reactive.formilyjs.org/zh-CN',
144 |           },
145 |           {
146 |             title: '@formily/core',
147 |             path: 'https://core.formilyjs.org/zh-CN',
148 |           },
149 |           {
150 |             title: '@formily/react',
151 |             path: 'https://react.formilyjs.org/zh-CN',
152 |           },
153 |           {
154 |             title: '@formily/vue',
155 |             path: 'https://vue.formilyjs.org',
156 |           },
157 |         ],
158 |       },
159 |       {
160 |         title: '组件生态',
161 |         children: [
162 |           {
163 |             title: '@formily/antd',
164 |             path: 'https://antd.formilyjs.org/zh-CN',
165 |           },
166 |           {
167 |             title: '@formily/antd-v5',
168 |             path: 'https://antd5.formilyjs.org/zh-CN',
169 |           },
170 |           {
171 |             title: '@formily/antd-mobile',
172 |             path: 'https://antd-mobile.formilyjs.org/zh-CN',
173 |           },
174 |           {
175 |             title: '@formily/next',
176 |             path: 'https://fusion.formilyjs.org/zh-CN',
177 |           },
178 |           {
179 |             title: '@formily/element',
180 |             path: 'https://element.formilyjs.org',
181 |           },
182 |           {
183 |             title: '@formily/element-plus',
184 |             path: 'https://element-plus.formilyjs.org',
185 |           },
186 |           {
187 |             title: '@formily/antdv',
188 |             path: 'https://antdv.formilyjs.org',
189 |           },
190 |           {
191 |             title: '@formily/vant',
192 |             path: 'https://vant.formilyjs.org',
193 |           },
194 |           {
195 |             title: '@formily/semi',
196 |             path: 'https://semi.formilyjs.org',
197 |           },
198 |           {
199 |             title: '@formily/tdesign-react',
200 |             path: 'https://tdesign-react.formilyjs.org',
201 |           },
202 |           {
203 |             title: 'aliyun teamix',
204 |             path: 'https://formily.dg.aliyun-inc.com',
205 |           },
206 |           {
207 |             title: 'antd-formily-boost',
208 |             path: 'https://github.com/fishedee/antd-formily-boost',
209 |           },
210 |         ],
211 |       },
212 |       {
213 |         title: '工具',
214 |         children: [
215 |           {
216 |             title: 'Formily 设计器',
217 |             path: 'https://designable-antd.formilyjs.org/',
218 |           },
219 |           {
220 |             title: '通用搭建引擎',
221 |             path: 'https://github.com/alibaba/designable',
222 |           },
223 |           {
224 |             title: 'Chrome扩展',
225 |             path: 'https://chrome.google.com/webstore/detail/formily-devtools/kkocalmbfnplecdmbadaapgapdioecfm?hl=zh-CN',
226 |           },
227 |         ],
228 |       },
229 |       {
230 |         title: '社区',
231 |         children: [
232 |           {
233 |             title: '论坛',
234 |             path: 'https://github.com/alibaba/formily/discussions',
235 |           },
236 |           { title: '知乎专栏', path: 'https://www.zhihu.com/column/uform' },
237 |         ],
238 |       },
239 |       {
240 |         title: '1.x文档',
241 |         path: 'https://v1.formilyjs.org',
242 |       },
243 |       {
244 |         title: 'GITHUB',
245 |         path: 'https://github.com/alibaba/formily',
246 |       },
247 |     ],
248 |   },
249 |   headScripts: [
250 |     `
251 |     function loadAd(){
252 |       var header = document.querySelector('.__dumi-default-layout-content .markdown h1')
253 |       if(header && !header.querySelector('#_carbonads_js')){
254 |         var script = document.createElement('script')
255 |         script.src = '//cdn.carbonads.com/carbon.js?serve=CEAICK3M&placement=formilyjsorg'
256 |         script.id = '_carbonads_js'
257 |         script.classList.add('head-ad')
258 |         header.appendChild(script)
259 |       }
260 |     }
261 |     var request = null
262 |     var observer = new MutationObserver(function(){
263 |       cancelIdleCallback(request)
264 |       request = requestIdleCallback(loadAd)
265 |     })
266 |     document.addEventListener('DOMContentLoaded',function(){
267 |       loadAd()
268 |       observer.observe(
269 |         document.body,
270 |         {
271 |           childList:true,
272 |           subtree:true
273 |         }
274 |       )
275 |     })
276 |     `,
277 |   ],
278 |   links: [
279 |     {
280 |       rel: 'stylesheet',
281 |       href: 'https://esm.sh/[email protected]/dist/antd.css',
282 |     },
283 |   ],
284 |   styles: [
285 |     `.__dumi-default-navbar-logo{
286 |       height: 60px !important;
287 |       width: 150px !important;
288 |       padding-left:0 !important;
289 |       color: transparent !important;
290 |     }
291 |     .__dumi-default-navbar{
292 |       padding: 0 28px !important;
293 |     }
294 |     .__dumi-default-layout-hero{
295 |       background-image: url(//img.alicdn.com/imgextra/i4/O1CN01ZcvS4e26XMsdsCkf9_!!6000000007671-2-tps-6001-4001.png);
296 |       background-size: cover;
297 |       background-repeat: no-repeat;
298 |       padding: 120px 0 !important;
299 |     }
300 |     .__dumi-default-layout-hero h1{
301 |       color:#45124e !important;
302 |       font-size:80px !important;
303 |       padding-bottom: 30px !important;
304 |     }
305 |     .__dumi-default-dark-switch {
306 |       display:none
307 |     }
308 |     nav a{
309 |       text-decoration: none !important;
310 |     }
311 |     #carbonads * {
312 |       margin: initial;
313 |       padding: initial;
314 |     }
315 |     #carbonads {
316 |       font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
317 |         Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', Helvetica, Arial,
318 |         sans-serif;
319 |     }
320 |     #carbonads {
321 |       display: flex;
322 |       max-width: 330px;
323 |       background-color: hsl(0, 0%, 98%);
324 |       box-shadow: 0 1px 4px 1px hsla(0, 0%, 0%, 0.1);
325 |       z-index: 100;
326 |       float:right;
327 |     }
328 |     #carbonads a {
329 |       color: inherit;
330 |       text-decoration: none;
331 |     }
332 |     #carbonads a:hover {
333 |       color: inherit;
334 |     }
335 |     #carbonads span {
336 |       position: relative;
337 |       display: block;
338 |       overflow: hidden;
339 |     }
340 |     #carbonads .carbon-wrap {
341 |       display: flex;
342 |     }
343 |     #carbonads .carbon-img {
344 |       display: block;
345 |       margin: 0;
346 |       line-height: 1;
347 |     }
348 |     #carbonads .carbon-img img {
349 |       display: block;
350 |     }
351 |     #carbonads .carbon-text {
352 |       font-size: 13px;
353 |       padding: 10px;
354 |       margin-bottom: 16px;
355 |       line-height: 1.5;
356 |       text-align: left;
357 |     }
358 |     #carbonads .carbon-poweredby {
359 |       display: block;
360 |       padding: 6px 8px;
361 |       background: #f1f1f2;
362 |       text-align: center;
363 |       text-transform: uppercase;
364 |       letter-spacing: 0.5px;
365 |       font-weight: 600;
366 |       font-size: 8px;
367 |       line-height: 1;
368 |       border-top-left-radius: 3px;
369 |       position: absolute;
370 |       bottom: 0;
371 |       right: 0;
372 |     }
373 |     `,
374 |   ],
375 |   menus: {
376 |     '/guide': [
377 |       {
378 |         title: 'Introduction',
379 |         path: '/guide',
380 |       },
381 |       {
382 |         title: 'How to learn Formily',
383 |         path: '/guide/learn-formily',
384 |       },
385 |       {
386 |         title: 'Quick start',
387 |         path: '/guide/quick-start',
388 |       },
389 |       {
390 |         title: 'V2 Upgrade Guide',
391 |         path: '/guide/upgrade',
392 |       },
393 |       {
394 |         title: 'Contribution Guide',
395 |         path: '/guide/contribution',
396 |       },
397 |       {
398 |         title: 'Form Builder Guide',
399 |         path: '/guide/form-builder',
400 |       },
401 |       {
402 |         title: 'Issue Helper',
403 |         path: '/guide/issue-helper',
404 |       },
405 |       {
406 |         title: 'Scenes',
407 |         children: [
408 |           {
409 |             title: 'Login&Signup',
410 |             path: '/guide/scenes/login-register',
411 |           },
412 |           {
413 |             title: 'Query List',
414 |             path: '/guide/scenes/query-list',
415 |           },
416 |           {
417 |             title: 'Edit&Details',
418 |             path: '/guide/scenes/edit-detail',
419 |           },
420 |           {
421 |             title: 'Dialog&Drawer',
422 |             path: '/guide/scenes/dialog-drawer',
423 |           },
424 |           {
425 |             title: 'Step Form',
426 |             path: '/guide/scenes/step-form',
427 |           },
428 |           {
429 |             title: 'Tab Form',
430 |             path: '/guide/scenes/tab-form',
431 |           },
432 |           {
433 |             title: 'More Scenes',
434 |             path: '/guide/scenes/more',
435 |           },
436 |         ],
437 |       },
438 |       {
439 |         title: 'Advanced Guide',
440 |         children: [
441 |           {
442 |             title: 'Form Validation',
443 |             path: '/guide/advanced/validate',
444 |           },
445 |           {
446 |             title: 'Form Layout',
447 |             path: '/guide/advanced/layout',
448 |           },
449 |           {
450 |             title: 'Asynchronous Data Sources',
451 |             path: '/guide/advanced/async',
452 |           },
453 |           {
454 |             title: 'Form Controlled',
455 |             path: '/guide/advanced/controlled',
456 |           },
457 |           {
458 |             title: 'Linkage Logic',
459 |             path: '/guide/advanced/linkages',
460 |           },
461 |           {
462 |             title: 'Calculator',
463 |             path: '/guide/advanced/calculator',
464 |           },
465 |           {
466 |             title: 'Custom Components',
467 |             path: '/guide/advanced/custom',
468 |           },
469 |           {
470 |             title: 'Front-end and back-end data compatibility solution',
471 |             path: '/guide/advanced/destructor',
472 |           },
473 |           {
474 |             title: 'Manage Business Logic',
475 |             path: '/guide/advanced/business-logic',
476 |           },
477 |           {
478 |             title: 'Pack on demand',
479 |             path: '/guide/advanced/build',
480 |           },
481 |         ],
482 |       },
483 |     ],
484 | 
485 |     '/zh-CN/guide': [
486 |       {
487 |         title: '介绍',
488 |         path: '/zh-CN/guide',
489 |       },
490 |       {
491 |         title: '如何学习Formily',
492 |         path: '/zh-CN/guide/learn-formily',
493 |       },
494 |       {
495 |         title: '快速开始',
496 |         path: '/zh-CN/guide/quick-start',
497 |       },
498 |       {
499 |         title: 'V2升级指南',
500 |         path: '/zh-CN/guide/upgrade',
501 |       },
502 |       {
503 |         title: '贡献指南',
504 |         path: '/zh-CN/guide/contribution',
505 |       },
506 |       {
507 |         title: '表单设计器开发指南',
508 |         path: '/zh-CN/guide/form-builder',
509 |       },
510 |       {
511 |         title: '问题反馈',
512 |         path: '/zh-CN/guide/issue-helper',
513 |       },
514 |       {
515 |         title: '场景案例',
516 |         children: [
517 |           {
518 |             title: '登录注册',
519 |             path: '/zh-CN/guide/scenes/login-register',
520 |           },
521 |           {
522 |             title: '查询列表',
523 |             path: '/zh-CN/guide/scenes/query-list',
524 |           },
525 |           {
526 |             title: '编辑详情',
527 |             path: '/zh-CN/guide/scenes/edit-detail',
528 |           },
529 |           {
530 |             title: '弹窗与抽屉',
531 |             path: '/zh-CN/guide/scenes/dialog-drawer',
532 |           },
533 |           {
534 |             title: '分步表单',
535 |             path: '/zh-CN/guide/scenes/step-form',
536 |           },
537 |           {
538 |             title: '选项卡/手风琴表单',
539 |             path: '/zh-CN/guide/scenes/tab-form',
540 |           },
541 |           {
542 |             title: '更多场景',
543 |             path: '/zh-CN/guide/scenes/more',
544 |           },
545 |         ],
546 |       },
547 |       {
548 |         title: '进阶指南',
549 |         children: [
550 |           {
551 |             title: '实现表单校验',
552 |             path: '/zh-CN/guide/advanced/validate',
553 |           },
554 |           {
555 |             title: '实现表单布局',
556 |             path: '/zh-CN/guide/advanced/layout',
557 |           },
558 |           {
559 |             title: '实现异步数据源',
560 |             path: '/zh-CN/guide/advanced/async',
561 |           },
562 |           {
563 |             title: '实现表单受控',
564 |             path: '/zh-CN/guide/advanced/controlled',
565 |           },
566 |           {
567 |             title: '实现联动逻辑',
568 |             path: '/zh-CN/guide/advanced/linkages',
569 |           },
570 |           {
571 |             title: '实现联动计算器',
572 |             path: '/zh-CN/guide/advanced/calculator',
573 |           },
574 |           {
575 |             title: '实现自定义组件',
576 |             path: '/zh-CN/guide/advanced/custom',
577 |           },
578 |           {
579 |             title: '前后端数据差异兼容方案',
580 |             path: '/zh-CN/guide/advanced/destructor',
581 |           },
582 |           {
583 |             title: '管理业务逻辑',
584 |             path: '/zh-CN/guide/advanced/business-logic',
585 |           },
586 |           {
587 |             title: '按需打包',
588 |             path: '/zh-CN/guide/advanced/build',
589 |           },
590 |         ],
591 |       },
592 |     ],
593 |   },
594 | }
595 | 
```

--------------------------------------------------------------------------------
/packages/core/README.md:
--------------------------------------------------------------------------------

```markdown
1 | # @formily/core
2 | 
```

--------------------------------------------------------------------------------
/packages/grid/README.md:
--------------------------------------------------------------------------------

```markdown
1 | # @formily/grid
2 | 
```

--------------------------------------------------------------------------------
/packages/react/README.md:
--------------------------------------------------------------------------------

```markdown
1 | # @formily/react
2 | 
```

--------------------------------------------------------------------------------
/packages/benchmark/README.md:
--------------------------------------------------------------------------------

```markdown
1 | # @formily/benchmark
2 | 
```

--------------------------------------------------------------------------------
/packages/json-schema/README.md:
--------------------------------------------------------------------------------

```markdown
1 | # @formily/json-schema
2 | 
```

--------------------------------------------------------------------------------
/packages/reactive-vue/README.md:
--------------------------------------------------------------------------------

```markdown
1 | # @formily/reactive-vue
2 | 
```

--------------------------------------------------------------------------------
/packages/path/README.md:
--------------------------------------------------------------------------------

```markdown
1 | # @formily/path
2 | 
3 | > Path System
4 | 
```

--------------------------------------------------------------------------------
/packages/reactive-test-cases-for-react18/README.md:
--------------------------------------------------------------------------------

```markdown
1 | # @formily/reactive-test-cases-for-react18
2 | 
```

--------------------------------------------------------------------------------
/packages/reactive/README.md:
--------------------------------------------------------------------------------

```markdown
1 | # @formily/reactive
2 | 
3 | > Web Reactive Library Like Mobx
4 | 
5 | ## QuikStart
6 | 
```

--------------------------------------------------------------------------------
/packages/antd/README.md:
--------------------------------------------------------------------------------

```markdown
1 | # @formily/antd
2 | 
3 | ### Install
4 | 
5 | ```bash
6 | npm install --save @formily/antd
7 | ```
8 | 
```

--------------------------------------------------------------------------------
/packages/next/README.md:
--------------------------------------------------------------------------------

```markdown
1 | # @formily/next
2 | 
3 | ### Install
4 | 
5 | ```bash
6 | npm install --save @formily/next
7 | ```
8 | 
```

--------------------------------------------------------------------------------
/packages/vue/README.md:
--------------------------------------------------------------------------------

```markdown
 1 | ## Usage
 2 | 
 3 | ### Requirement
 4 | 
 5 | vue^2.6.0 + @vue/composition-api^1.0.0-beta.1
 6 | 
 7 | Or
 8 | 
 9 | vue>=3.0.0-rc.0
10 | 
```

--------------------------------------------------------------------------------
/packages/element/README.md:
--------------------------------------------------------------------------------

```markdown
 1 | # @formily/element
 2 | 
 3 | ### Requirement
 4 | 
 5 | vue^2.6.0 + @vue/composition-api^1.0.0-beta.1
 6 | 
 7 | ### Install
 8 | 
 9 | ```bash
10 | npm install --save @formily/element
11 | ```
12 | 
```

--------------------------------------------------------------------------------
/packages/reactive-react/README.md:
--------------------------------------------------------------------------------

```markdown
 1 | # @formily/reactive-react
 2 | 
 3 | ## QuikStart
 4 | 
 5 | ```tsx
 6 | import React from 'react'
 7 | import { observable } from '@formily/reactive'
 8 | import { observer } from '@formily/reactive-react'
 9 | 
10 | const obs = observable({
11 |   count: 0,
12 | })
13 | 
14 | export default observer(() => {
15 |   return (
16 |     <div>
17 |       {obs.count}
18 |       <button
19 |         onClick={() => {
20 |           obs.count++
21 |         }}
22 |       >
23 |         Click
24 |       </button>
25 |     </div>
26 |   )
27 | })
28 | ```
29 | 
```

--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------

```markdown
 1 | English | [简体中文](./README.zh-cn.md)
 2 | 
 3 | <p align="center">
 4 | <img src="https://img.alicdn.com/tfs/TB1fHhZu4D1gK0jSZFyXXciOVXa-2500-1200.png">
 5 | <img src="https://img.shields.io/npm/dt/@formily/core"/>
 6 | <img src="https://img.shields.io/npm/dm/@formily/core"/>
 7 | <a href="https://www.npmjs.com/package/@formily/core"><img src="https://img.shields.io/npm/v/@formily/core.svg"></a>
 8 | <a href="https://codecov.io/gh/alibaba/formily">
 9 |   <img src="https://codecov.io/gh/alibaba/formily/branch/formily_next/graph/badge.svg?token=3V9RU8Wh9d"/>
10 | </a>
11 | <img alt="PRs Welcome" src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg"/>
12 | <a href="https://github.com/actions-cool/issues-helper">
13 |   <img src="https://img.shields.io/badge/using-issues--helper-blueviolet"/>
14 | </a>
15 | <a href="https://app.netlify.com/sites/formily/deploys"><img src="https://api.netlify.com/api/v1/badges/7145918b-9cb5-47f8-8a42-111969e232ef/deploy-status"/></a>
16 | </p>
17 | 
18 | ---
19 | 
20 | ## Background
21 | 
22 | In React, the whole tree rendering performance problem of the form is very obvious in the controlled mode. Especially for the scene of data linkage, it is easy to cause the page to be stuck. To solve this problem, we have distributed the management of the state of each form field, which significantly improves the performance of the form operations. At the same time, we deeply integrate the JSON Schema protocol to help you solve the problem of back-end driven form rendering quickly.
23 | 
24 | ## Features
25 | 
26 | - 🖼 Designable, You can quickly develop forms at low cost through [Form Builder](https://designable-antd.formilyjs.org/).
27 | - 🚀 High performance, fields managed independently, rather rerender the whole tree.
28 | - 💡 Integrated Alibaba Fusion and Ant Design components are guaranteed to work out of the box.
29 | - 🎨 JSON Schema applied for BackEnd. JSchema applied for FrontEnd. Two paradigms can be converted to each other.
30 | - 🏅 Side effects are managed independently, making form data linkages easier than ever before.
31 | - 🌯 Override most complicated form layout use cases.
32 | 
33 | ## Form Builder
34 | 
35 | ![https://designable-antd.formilyjs.org/](https://img.alicdn.com/imgextra/i3/O1CN01xAJj1y1wcGzXYc1Uq_!!6000000006328-2-tps-2980-1740.png)
36 | 
37 | ## WebSite
38 | 
39 | 2.0
40 | 
41 | https://formilyjs.org
42 | 
43 | 1.0
44 | 
45 | https://v1.formilyjs.org
46 | 
47 | ## Community
48 | 
49 | - [formilyjs](https://github.com/formilyjs)
50 | - [designable](https://github.com/alibaba/designable)
51 | - [icejs](https://github.com/alibaba/ice)
52 | 
53 | ## How to contribute?
54 | 
55 | - [Contribute document](https://formilyjs.org/zh-CN/guide/contribution)
56 | 
57 | ## Contributors
58 | 
59 | This project exists thanks to all the people who contribute.
60 | <a href="https://github.com/alibaba/formily/graphs/contributors"><img src="https://contrib.rocks/image?repo=alibaba/formily" /></a>
61 | 
62 | ## LICENSE
63 | 
64 | Formily is open source software licensed as
65 | [MIT](https://github.com/alibaba/formily/blob/master/LICENSE.md).
66 | 
```

--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```

--------------------------------------------------------------------------------
/packages/antd/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```

--------------------------------------------------------------------------------
/packages/core/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```

--------------------------------------------------------------------------------
/packages/react/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```

--------------------------------------------------------------------------------
/packages/shared/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```

--------------------------------------------------------------------------------
/packages/validator/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```

--------------------------------------------------------------------------------
/devtools/chrome-extension/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 | 
```

--------------------------------------------------------------------------------
/packages/benchmark/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 | 
```

--------------------------------------------------------------------------------
/packages/grid/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 | 
```

--------------------------------------------------------------------------------
/packages/json-schema/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 | 
```

--------------------------------------------------------------------------------
/packages/path/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 | 
```

--------------------------------------------------------------------------------
/packages/reactive-react/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 | 
```

--------------------------------------------------------------------------------
/packages/reactive-test-cases-for-react18/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 | 
```

--------------------------------------------------------------------------------
/packages/reactive-vue/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 | 
```

--------------------------------------------------------------------------------
/packages/reactive/LICENSE.md:
--------------------------------------------------------------------------------

```markdown
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2015-present, Alibaba Group Holding Limited. All rights reserved.
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
 6 | this software and associated documentation files (the "Software"), to deal in
 7 | the Software without restriction, including without limitation the rights to
 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 | 
```
Page 1/52FirstPrevNextLast