@silver-formily/vue 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +118 -0
- package/README.md +118 -0
- package/esm/components/ArrayField.d.ts +8 -8
- package/esm/components/ArrayField.mjs.map +1 -1
- package/esm/components/ExpressionScope.mjs.map +1 -1
- package/esm/components/Field.d.ts +8 -8
- package/esm/components/Field.mjs.map +1 -1
- package/esm/components/FormConsumer.mjs.map +1 -1
- package/esm/components/FormProvider.mjs.map +1 -1
- package/esm/components/ObjectField.d.ts +2 -2
- package/esm/components/ObjectField.mjs.map +1 -1
- package/esm/components/ReactiveField.mjs.map +1 -1
- package/esm/components/RecursionField.mjs.map +1 -1
- package/esm/components/SchemaField.d.ts +460 -460
- package/esm/components/SchemaField.mjs.map +1 -1
- package/esm/components/VoidField.mjs.map +1 -1
- package/esm/hooks/useField.mjs.map +1 -1
- package/esm/hooks/useForm.mjs.map +1 -1
- package/esm/shared/connect.mjs.map +1 -1
- package/esm/shared/context.mjs.map +1 -1
- package/esm/types/index.d.ts +20 -4
- package/esm/types/validator.d.ts +37 -0
- package/esm/types/validator.mjs +2 -0
- package/esm/types/validator.mjs.map +1 -0
- package/esm/utils/fieldProps.d.ts +1 -1
- package/esm/utils/fieldProps.mjs.map +1 -1
- package/esm/utils/getRawComponent.mjs.map +1 -1
- package/esm/utils/reactiveFieldHelpers.mjs.map +1 -1
- package/esm/utils/recursionFieldProps.mjs.map +1 -1
- package/esm/utils/resolveSchemaProps.mjs.map +1 -1
- package/esm/utils/runtimeProps.mjs.map +1 -1
- package/esm/utils/schemaFieldProps.d.ts +24 -24
- package/esm/utils/schemaFieldProps.mjs.map +1 -1
- package/package.json +7 -3
package/README.en.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Silver Formily Vue
|
|
2
|
+
|
|
3
|
+
[Documentation](https://vue.silver-formily.org/) · [Local docs index](./docs/index.md) · [中文 README](./README.md)
|
|
4
|
+
|
|
5
|
+
@silver-formily/vue is a Vue 3–first runtime wrapper around [Formily](https://formilyjs.org/). It keeps the orchestration power of `@formily/vue` while removing Vue 2 compatibility layers, redundant DOM wrappers, and inconsistent event contracts. The source lives in `src/`, docs in `docs/`, and build artifacts in `esm/`.
|
|
6
|
+
|
|
7
|
+
## ✨ Features
|
|
8
|
+
|
|
9
|
+
- **Pure Vue 3 runtime** – no `vue-demi`, `vue-frag`, or compatibility shims; the render tree mirrors native Vue component libraries.
|
|
10
|
+
- **Native DOM & events** – relies on `modelValue` / `onUpdate:modelValue`, so Element Plus and most Vue 3 UI kits work without extra adapters.
|
|
11
|
+
- **Richer TypeScript hints** – explicit generics and shared interfaces sit beside the runtime to keep emitted `.d.ts` files in sync.
|
|
12
|
+
- **Formily ecosystem alignment** – works with `@formily/core`, `@formily/json-schema`, and other official packages, keeping migration costs low.
|
|
13
|
+
- **Docs & demos included** – VitePress docs describe APIs, migration notes, and Element Plus demos; run `pnpm docs:dev` to browse locally.
|
|
14
|
+
|
|
15
|
+
## 🔄 Differences vs `@formily/vue`
|
|
16
|
+
|
|
17
|
+
| Aspect | `@silver-formily/vue` 2.x | Official `@formily/vue` |
|
|
18
|
+
| -------------- | ------------------------------------------------------------------ | ---------------------------------------- |
|
|
19
|
+
| Event contract | `modelValue` / `onUpdate:modelValue` | `value` / `onChange` |
|
|
20
|
+
| DOM structure | No extra `template` / `display: contents` wrappers | Extra containers for Vue 2 compatibility |
|
|
21
|
+
| Dependencies | Vue 3–only runtime deps | Uses `vue-demi` to target Vue 2 + 3 |
|
|
22
|
+
| Schema export | Schema is **not** re-exported (import from `@formily/json-schema`) | Schema is re-exported |
|
|
23
|
+
| Compatibility | Use `@silver-formily/vue@1.x` for strict parity | Official package |
|
|
24
|
+
|
|
25
|
+
## 📦 Peer Dependencies
|
|
26
|
+
|
|
27
|
+
Install these alongside the library in your host app:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
@formily/core ^2
|
|
31
|
+
@formily/json-schema ^2
|
|
32
|
+
@formily/reactive ^2
|
|
33
|
+
@formily/reactive-vue ^2
|
|
34
|
+
@formily/shared ^2
|
|
35
|
+
vue ^3.3.0+
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 🚀 Installation
|
|
39
|
+
|
|
40
|
+
Recommended pnpm command:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
pnpm add @silver-formily/vue @formily/core @formily/json-schema @formily/reactive @formily/reactive-vue @formily/shared
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## ⚡️ Quick Start
|
|
47
|
+
|
|
48
|
+
The snippet below wires Element Plus inputs into Formily:
|
|
49
|
+
|
|
50
|
+
```vue
|
|
51
|
+
<script setup lang="ts">
|
|
52
|
+
import { createForm } from '@formily/core'
|
|
53
|
+
import {
|
|
54
|
+
connect,
|
|
55
|
+
Field,
|
|
56
|
+
FormProvider,
|
|
57
|
+
mapProps,
|
|
58
|
+
} from '@silver-formily/vue'
|
|
59
|
+
import { ElFormItem, ElInput } from 'element-plus'
|
|
60
|
+
|
|
61
|
+
const form = createForm({ validateFirst: true })
|
|
62
|
+
|
|
63
|
+
const FormItem = connect(
|
|
64
|
+
ElFormItem,
|
|
65
|
+
mapProps(
|
|
66
|
+
{ title: 'label', required: true },
|
|
67
|
+
(_, field) => ({ error: field.selfErrors[0] || undefined })
|
|
68
|
+
),
|
|
69
|
+
)
|
|
70
|
+
</script>
|
|
71
|
+
|
|
72
|
+
<template>
|
|
73
|
+
<FormProvider :form="form">
|
|
74
|
+
<Field
|
|
75
|
+
name="email"
|
|
76
|
+
title="Email"
|
|
77
|
+
required
|
|
78
|
+
:decorator="[FormItem]"
|
|
79
|
+
:component="[ElInput, { placeholder: 'hello@formily.dev' }]"
|
|
80
|
+
/>
|
|
81
|
+
</FormProvider>
|
|
82
|
+
</template>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Explore more components (`SchemaField`, `RecursionField`, `ArrayField`, etc.) and composables in [`docs/api`](./docs/api).
|
|
86
|
+
|
|
87
|
+
## 🧱 API Overview
|
|
88
|
+
|
|
89
|
+
- **Components**: `FormProvider`, `FormConsumer`, `Field`, `ArrayField`, `ObjectField`, `VoidField`, `SchemaField`, `RecursionField`, `ReactiveField`, `ExpressionScope`.
|
|
90
|
+
- **Composables**: `useForm`, `useField`, `useFieldSchema`, `useFormEffects`, `useParentForm`, `useAttach`, `useInjectionCleaner`.
|
|
91
|
+
- **Shared helpers**: `connect`, `mapProps`, plus factories in `src/shared` and `src/utils`.
|
|
92
|
+
|
|
93
|
+
All public symbols are re-exported from `src/index.ts`, and the published bundle (JS + declarations) lives in `esm/`.
|
|
94
|
+
|
|
95
|
+
## 🛠️ Local Development
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
pnpm install # Install dependencies
|
|
99
|
+
pnpm lint # Run Antfu ESLint rules
|
|
100
|
+
pnpm build # Build the library + types via Vite
|
|
101
|
+
pnpm docs:dev # Launch the VitePress docs site
|
|
102
|
+
pnpm docs:build # Generate static docs into docs/.vitepress/dist
|
|
103
|
+
pnpm commit # Conventional Commit helper (czg)
|
|
104
|
+
pnpm release # release-it workflow (requires clean tree)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
- Build output is generated into `esm/`; do not hand-edit this directory.
|
|
108
|
+
- Automated tests are not wired yet—document manual verification (Vue + Formily versions, schema, browser) in every PR.
|
|
109
|
+
- Follow `@antfu/eslint-config` style: 2 spaces, single quotes, dangling commas where allowed, no semicolons.
|
|
110
|
+
|
|
111
|
+
## 📚 Docs & Examples
|
|
112
|
+
|
|
113
|
+
- Visit the published site: <https://vue.silver-formily.org/>.
|
|
114
|
+
- `docs/demos` contains Element Plus playgrounds that double as regression samples.
|
|
115
|
+
|
|
116
|
+
## 📄 License
|
|
117
|
+
|
|
118
|
+
MIT © hezhengxu
|
package/README.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Silver Formily Vue
|
|
2
|
+
|
|
3
|
+
[文档网站](https://vue.silver-formily.org/) · [本地文档首页](./docs/zh/index.md) · [English README](./README.en.md)
|
|
4
|
+
|
|
5
|
+
@silver-formily/vue 是一个专注于 Vue 3 生态的 [Formily](https://formilyjs.org/) 运行时封装。它保留了 `@formily/vue` 的编排能力,同时去除了 Vue 2 兼容层、冗余 DOM 包裹以及不一致的事件契约。源码位于 `src/`,文档位于 `docs/`,构建产物存放在 `esm/`。
|
|
6
|
+
|
|
7
|
+
## ✨ 特性
|
|
8
|
+
|
|
9
|
+
- **纯粹的 Vue 3 代码路径**:完全抛弃 `vue-demi`、`vue-frag` 等兼容依赖,渲染树贴近原生组件库。
|
|
10
|
+
- **原生 DOM 与事件语义**:统一使用 `modelValue` / `onUpdate:modelValue`,Element Plus 等组件可直接对接。
|
|
11
|
+
- **完善的 TypeScript 类型**:在运行时附近维护显式泛型与公共接口,确保生成的 `.d.ts` 与实现同步。
|
|
12
|
+
- **Formily 生态对齐**:与 `@formily/core`、`@formily/json-schema` 等官方包保持兼容,迁移成本低。
|
|
13
|
+
- **配套文档与示例**:内置 VitePress 文档,包含 API、迁移提示以及 Element Plus 示例,执行 `pnpm docs:dev` 即可查看。
|
|
14
|
+
|
|
15
|
+
## 🔄 与 `@formily/vue` 的差异
|
|
16
|
+
|
|
17
|
+
| 项目 | `@silver-formily/vue` 2.x | 官方 `@formily/vue` |
|
|
18
|
+
| ----------- | ----------------------------------------------------------- | -------------------------------- |
|
|
19
|
+
| 事件契约 | `modelValue` / `onUpdate:modelValue` | `value` / `onChange` |
|
|
20
|
+
| DOM 结构 | 无额外 `template` / `display: contents` 包裹 | 含 Vue 2 兼容容器 |
|
|
21
|
+
| 依赖 | 仅依赖 Vue 3 生态 | 借助 `vue-demi` 同时支持 Vue 2/3 |
|
|
22
|
+
| Schema 导出 | 不再 re-export `Schema`(请从 `@formily/json-schema` 引入) | 仍导出 |
|
|
23
|
+
| 兼容策略 | 需要与官方保持完全一致时可使用 `@silver-formily/vue@1.x` | 官方包 |
|
|
24
|
+
|
|
25
|
+
## 📦 Peer Dependencies
|
|
26
|
+
|
|
27
|
+
在宿主应用中需要同时安装:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
@formily/core ^2
|
|
31
|
+
@formily/json-schema ^2
|
|
32
|
+
@formily/reactive ^2
|
|
33
|
+
@formily/reactive-vue ^2
|
|
34
|
+
@formily/shared ^2
|
|
35
|
+
vue ^3.3.0+
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 🚀 安装
|
|
39
|
+
|
|
40
|
+
推荐使用 pnpm:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
pnpm add @silver-formily/vue @formily/core @formily/json-schema @formily/reactive @formily/reactive-vue @formily/shared
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## ⚡️ 快速开始
|
|
47
|
+
|
|
48
|
+
以下示例演示如何结合 Element Plus 构建最小表单:
|
|
49
|
+
|
|
50
|
+
```vue
|
|
51
|
+
<script setup lang="ts">
|
|
52
|
+
import { createForm } from '@formily/core'
|
|
53
|
+
import {
|
|
54
|
+
connect,
|
|
55
|
+
Field,
|
|
56
|
+
FormProvider,
|
|
57
|
+
mapProps,
|
|
58
|
+
} from '@silver-formily/vue'
|
|
59
|
+
import { ElFormItem, ElInput } from 'element-plus'
|
|
60
|
+
|
|
61
|
+
const form = createForm({ validateFirst: true })
|
|
62
|
+
|
|
63
|
+
const FormItem = connect(
|
|
64
|
+
ElFormItem,
|
|
65
|
+
mapProps(
|
|
66
|
+
{ title: 'label', required: true },
|
|
67
|
+
(_, field) => ({ error: field.selfErrors[0] || undefined })
|
|
68
|
+
),
|
|
69
|
+
)
|
|
70
|
+
</script>
|
|
71
|
+
|
|
72
|
+
<template>
|
|
73
|
+
<FormProvider :form="form">
|
|
74
|
+
<Field
|
|
75
|
+
name="email"
|
|
76
|
+
title="Email"
|
|
77
|
+
required
|
|
78
|
+
:decorator="[FormItem]"
|
|
79
|
+
:component="[ElInput, { placeholder: 'hello@formily.dev' }]"
|
|
80
|
+
/>
|
|
81
|
+
</FormProvider>
|
|
82
|
+
</template>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
更多组件(`SchemaField`、`RecursionField`、`ArrayField` 等)与组合式 API 请参阅 [`docs/api`](./docs/api)。
|
|
86
|
+
|
|
87
|
+
## 🧱 API 速览
|
|
88
|
+
|
|
89
|
+
- **组件**:`FormProvider`、`FormConsumer`、`Field`、`ArrayField`、`ObjectField`、`VoidField`、`SchemaField`、`RecursionField`、`ReactiveField`、`ExpressionScope`。
|
|
90
|
+
- **组合式函数**:`useForm`、`useField`、`useFieldSchema`、`useFormEffects`、`useParentForm`、`useAttach`、`useInjectionCleaner`。
|
|
91
|
+
- **共享工具**:`connect`、`mapProps` 以及位于 `src/shared`、`src/utils` 的渲染辅助。
|
|
92
|
+
|
|
93
|
+
所有公共符号均通过 `src/index.ts` 输出,构建后的 JS 与 `.d.ts` 保存在 `esm/`。
|
|
94
|
+
|
|
95
|
+
## 🛠️ 本地开发
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
pnpm install # 安装依赖
|
|
99
|
+
pnpm lint # 运行 Antfu ESLint 规则
|
|
100
|
+
pnpm build # 基于 Vite 生成库与类型
|
|
101
|
+
pnpm docs:dev # 启动 VitePress 文档站点
|
|
102
|
+
pnpm docs:build # 生成静态文档 (docs/.vitepress/dist)
|
|
103
|
+
pnpm commit # 使用 czg 编写 Conventional Commit
|
|
104
|
+
pnpm release # release-it 发布,需要干净工作区
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
- 构建输出位于 `esm/`,请勿手动修改。
|
|
108
|
+
- 目前没有自动化测试,请在 PR 中记录手动验证(Vue/Formily 版本、使用的 schema、浏览器等)。
|
|
109
|
+
- 代码风格遵循 `@antfu/eslint-config`:2 空格、单引号、允许尾随逗号、无分号。
|
|
110
|
+
|
|
111
|
+
## 📚 文档与示例
|
|
112
|
+
|
|
113
|
+
- 在线站点:<https://vue.silver-formily.org/>
|
|
114
|
+
- `docs/demos` 提供 Element Plus 示例,可作为封装自定义组件的起点。
|
|
115
|
+
|
|
116
|
+
## 📄 License
|
|
117
|
+
|
|
118
|
+
MIT © hezhengxu
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
declare const _default: import('vue').DefineComponent<{
|
|
2
|
+
validator?: string | import('../types/validator').ValidatorFunction<any> | import('../types/validator').IValidatorRules<any> | import('../types/validator').MultiValidator<any>;
|
|
3
|
+
required?: boolean;
|
|
4
|
+
pattern?: string;
|
|
2
5
|
name: import('@formily/core').FormPathPattern;
|
|
6
|
+
data?: any;
|
|
3
7
|
basePath?: import('@formily/core').FormPathPattern;
|
|
4
8
|
title?: any;
|
|
5
9
|
description?: any;
|
|
6
10
|
value?: any;
|
|
7
11
|
initialValue?: any;
|
|
8
|
-
required?: boolean;
|
|
9
12
|
display?: string;
|
|
10
|
-
pattern?: string;
|
|
11
13
|
hidden?: boolean;
|
|
12
14
|
visible?: boolean;
|
|
13
15
|
editable?: boolean;
|
|
@@ -18,24 +20,24 @@ declare const _default: import('vue').DefineComponent<{
|
|
|
18
20
|
validateFirst?: boolean;
|
|
19
21
|
validatePattern?: import('@formily/core').FieldPatternTypes[];
|
|
20
22
|
validateDisplay?: import('@formily/core').FieldDisplayTypes[];
|
|
21
|
-
validator?: string | import('@formily/validator').ValidatorFunction<import('@formily/core').FieldValidatorContext> | import('@formily/validator').IValidatorRules<import('@formily/core').FieldValidatorContext> | import('@formily/validator').MultiValidator<import('@formily/core').FieldValidatorContext>;
|
|
22
23
|
decorator?: import('@formily/core').FieldDecorator<import('vue').Component, any>;
|
|
23
24
|
component?: import('@formily/core').FieldComponent<import('vue').Component, any>;
|
|
24
25
|
reactions?: import('@formily/core').FieldReaction[] | import('@formily/core').FieldReaction;
|
|
25
26
|
content?: any;
|
|
26
|
-
data?: any;
|
|
27
27
|
}, () => import('vue').VNode<import('vue').RendererNode, import('vue').RendererElement, {
|
|
28
28
|
[key: string]: any;
|
|
29
29
|
}>, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
|
|
30
|
+
validator?: string | import('../types/validator').ValidatorFunction<any> | import('../types/validator').IValidatorRules<any> | import('../types/validator').MultiValidator<any>;
|
|
31
|
+
required?: boolean;
|
|
32
|
+
pattern?: string;
|
|
30
33
|
name: import('@formily/core').FormPathPattern;
|
|
34
|
+
data?: any;
|
|
31
35
|
basePath?: import('@formily/core').FormPathPattern;
|
|
32
36
|
title?: any;
|
|
33
37
|
description?: any;
|
|
34
38
|
value?: any;
|
|
35
39
|
initialValue?: any;
|
|
36
|
-
required?: boolean;
|
|
37
40
|
display?: string;
|
|
38
|
-
pattern?: string;
|
|
39
41
|
hidden?: boolean;
|
|
40
42
|
visible?: boolean;
|
|
41
43
|
editable?: boolean;
|
|
@@ -46,11 +48,9 @@ declare const _default: import('vue').DefineComponent<{
|
|
|
46
48
|
validateFirst?: boolean;
|
|
47
49
|
validatePattern?: import('@formily/core').FieldPatternTypes[];
|
|
48
50
|
validateDisplay?: import('@formily/core').FieldDisplayTypes[];
|
|
49
|
-
validator?: string | import('@formily/validator').ValidatorFunction<import('@formily/core').FieldValidatorContext> | import('@formily/validator').IValidatorRules<import('@formily/core').FieldValidatorContext> | import('@formily/validator').MultiValidator<import('@formily/core').FieldValidatorContext>;
|
|
50
51
|
decorator?: import('@formily/core').FieldDecorator<import('vue').Component, any>;
|
|
51
52
|
component?: import('@formily/core').FieldComponent<import('vue').Component, any>;
|
|
52
53
|
reactions?: import('@formily/core').FieldReaction[] | import('@formily/core').FieldReaction;
|
|
53
54
|
content?: any;
|
|
54
|
-
data?: any;
|
|
55
55
|
}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
56
56
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayField.mjs","sources":["../../src/components/ArrayField.ts"],"sourcesContent":["import type { IArrayFieldProps } from '../types'\nimport { defineComponent, h } from 'vue'\nimport { fieldProps } from '../utils/fieldProps'\nimport { getRawComponent } from '../utils/getRawComponent'\nimport ReactiveField from './ReactiveField'\n\nexport default defineComponent({\n name: 'ArrayField',\n props: fieldProps,\n setup(props: IArrayFieldProps, { slots }) {\n return () => {\n const componentData = {\n fieldType: 'ArrayField',\n fieldProps: {\n ...props,\n ...getRawComponent(props),\n },\n }\n return h(ReactiveField, componentData, slots)\n }\n },\n})\n"],"names":["ArrayField","defineComponent","fieldProps","props","slots","componentData","getRawComponent","h","ReactiveField"],"mappings":";;;;AAMA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAOC;AAAA,EACP,MAAMC,GAAyB,EAAE,OAAAC,KAAS;AACxC,WAAO,MAAM;AACX,YAAMC,IAAgB;AAAA,QACpB,WAAW;AAAA,QACX,YAAY;AAAA,UACV,GAAGF;AAAA,UACH,GAAGG,EAAgBH,CAAK;AAAA,QAAA;AAAA,MAC1B;AAEF,aAAOI,EAAEC,GAAeH,GAAeD,CAAK;AAAA,IAC9C;AAAA,EACF;AACF,CAAC;"}
|
|
1
|
+
{"version":3,"file":"ArrayField.mjs","sources":["../../src/components/ArrayField.ts"],"sourcesContent":["import type { IArrayFieldProps } from '../types'\r\nimport { defineComponent, h } from 'vue'\r\nimport { fieldProps } from '../utils/fieldProps'\r\nimport { getRawComponent } from '../utils/getRawComponent'\r\nimport ReactiveField from './ReactiveField'\r\n\r\nexport default defineComponent({\r\n name: 'ArrayField',\r\n props: fieldProps,\r\n setup(props: IArrayFieldProps, { slots }) {\r\n return () => {\r\n const componentData = {\r\n fieldType: 'ArrayField',\r\n fieldProps: {\r\n ...props,\r\n ...getRawComponent(props),\r\n },\r\n }\r\n return h(ReactiveField, componentData, slots)\r\n }\r\n },\r\n})\r\n"],"names":["ArrayField","defineComponent","fieldProps","props","slots","componentData","getRawComponent","h","ReactiveField"],"mappings":";;;;AAMA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAOC;AAAA,EACP,MAAMC,GAAyB,EAAE,OAAAC,KAAS;AACxC,WAAO,MAAM;AACX,YAAMC,IAAgB;AAAA,QACpB,WAAW;AAAA,QACX,YAAY;AAAA,UACV,GAAGF;AAAA,UACH,GAAGG,EAAgBH,CAAK;AAAA,QAAA;AAAA,MAC1B;AAEF,aAAOI,EAAEC,GAAeH,GAAeD,CAAK;AAAA,IAC9C;AAAA,EACF;AACF,CAAC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpressionScope.mjs","sources":["../../src/components/ExpressionScope.ts"],"sourcesContent":["import type { PropType, Ref } from 'vue'\nimport type { IExpressionScopeProps, SchemaExpressionScope } from '../types'\nimport { lazyMerge } from '@formily/shared'\nimport { computed, defineComponent, inject, provide } from 'vue'\nimport { SchemaExpressionScopeSymbol } from '../shared'\n\nexport default defineComponent({\n name: 'ExpressionScope',\n props: {\n value: {\n type: Object as PropType<IExpressionScopeProps['value']>,\n required: true,\n },\n },\n setup(props, { slots }) {\n const parentScopeRef = inject<Ref<SchemaExpressionScope>>(SchemaExpressionScopeSymbol)\n const expressionScopeRef = computed<SchemaExpressionScope>(() => {\n const parentScope = parentScopeRef?.value ?? {}\n return lazyMerge(parentScope, props.value)\n })\n\n provide(SchemaExpressionScopeSymbol, expressionScopeRef)\n\n return () => slots.default?.()\n },\n})\n"],"names":["ExpressionScope","defineComponent","props","slots","parentScopeRef","inject","SchemaExpressionScopeSymbol","expressionScopeRef","computed","parentScope","lazyMerge","provide"],"mappings":";;;;;AAMA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,MAAMC,GAAO,EAAE,OAAAC,KAAS;AACtB,UAAMC,IAAiBC,EAAmCC,CAA2B,GAC/EC,IAAqBC,EAAgC,MAAM;AAC/D,YAAMC,IAAcL,GAAgB,SAAS,CAAA;AAC7C,aAAOM,EAAUD,GAAaP,EAAM,KAAK;AAAA,IAC3C,CAAC;AAED,WAAAS,EAAQL,GAA6BC,CAAkB,GAEhD,MAAMJ,EAAM,UAAA;AAAA,EACrB;AACF,CAAC;"}
|
|
1
|
+
{"version":3,"file":"ExpressionScope.mjs","sources":["../../src/components/ExpressionScope.ts"],"sourcesContent":["import type { PropType, Ref } from 'vue'\r\nimport type { IExpressionScopeProps, SchemaExpressionScope } from '../types'\r\nimport { lazyMerge } from '@formily/shared'\r\nimport { computed, defineComponent, inject, provide } from 'vue'\r\nimport { SchemaExpressionScopeSymbol } from '../shared'\r\n\r\nexport default defineComponent({\r\n name: 'ExpressionScope',\r\n props: {\r\n value: {\r\n type: Object as PropType<IExpressionScopeProps['value']>,\r\n required: true,\r\n },\r\n },\r\n setup(props, { slots }) {\r\n const parentScopeRef = inject<Ref<SchemaExpressionScope>>(SchemaExpressionScopeSymbol)\r\n const expressionScopeRef = computed<SchemaExpressionScope>(() => {\r\n const parentScope = parentScopeRef?.value ?? {}\r\n return lazyMerge(parentScope, props.value)\r\n })\r\n\r\n provide(SchemaExpressionScopeSymbol, expressionScopeRef)\r\n\r\n return () => slots.default?.()\r\n },\r\n})\r\n"],"names":["ExpressionScope","defineComponent","props","slots","parentScopeRef","inject","SchemaExpressionScopeSymbol","expressionScopeRef","computed","parentScope","lazyMerge","provide"],"mappings":";;;;;AAMA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,MAAMC,GAAO,EAAE,OAAAC,KAAS;AACtB,UAAMC,IAAiBC,EAAmCC,CAA2B,GAC/EC,IAAqBC,EAAgC,MAAM;AAC/D,YAAMC,IAAcL,GAAgB,SAAS,CAAA;AAC7C,aAAOM,EAAUD,GAAaP,EAAM,KAAK;AAAA,IAC3C,CAAC;AAED,WAAAS,EAAQL,GAA6BC,CAAkB,GAEhD,MAAMJ,EAAM,UAAA;AAAA,EACrB;AACF,CAAC;"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
declare const _default: import('vue').DefineComponent<{
|
|
2
|
+
validator?: string | import('../types/validator').ValidatorFunction<any> | import('../types/validator').IValidatorRules<any> | import('../types/validator').MultiValidator<any>;
|
|
3
|
+
required?: boolean;
|
|
4
|
+
pattern?: string;
|
|
2
5
|
name: import('@formily/core').FormPathPattern;
|
|
6
|
+
data?: any;
|
|
3
7
|
basePath?: import('@formily/core').FormPathPattern;
|
|
4
8
|
title?: any;
|
|
5
9
|
description?: any;
|
|
6
10
|
value?: any;
|
|
7
11
|
initialValue?: any;
|
|
8
|
-
required?: boolean;
|
|
9
12
|
display?: string;
|
|
10
|
-
pattern?: string;
|
|
11
13
|
hidden?: boolean;
|
|
12
14
|
visible?: boolean;
|
|
13
15
|
editable?: boolean;
|
|
@@ -18,24 +20,24 @@ declare const _default: import('vue').DefineComponent<{
|
|
|
18
20
|
validateFirst?: boolean;
|
|
19
21
|
validatePattern?: import('@formily/core').FieldPatternTypes[];
|
|
20
22
|
validateDisplay?: import('@formily/core').FieldDisplayTypes[];
|
|
21
|
-
validator?: string | import('@formily/validator').ValidatorFunction<import('@formily/core').FieldValidatorContext> | import('@formily/validator').IValidatorRules<import('@formily/core').FieldValidatorContext> | import('@formily/validator').MultiValidator<import('@formily/core').FieldValidatorContext>;
|
|
22
23
|
decorator?: import('@formily/core').FieldDecorator<import('vue').Component, any>;
|
|
23
24
|
component?: import('@formily/core').FieldComponent<import('vue').Component, any>;
|
|
24
25
|
reactions?: import('@formily/core').FieldReaction[] | import('@formily/core').FieldReaction;
|
|
25
26
|
content?: any;
|
|
26
|
-
data?: any;
|
|
27
27
|
}, () => import('vue').VNode<import('vue').RendererNode, import('vue').RendererElement, {
|
|
28
28
|
[key: string]: any;
|
|
29
29
|
}>, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
|
|
30
|
+
validator?: string | import('../types/validator').ValidatorFunction<any> | import('../types/validator').IValidatorRules<any> | import('../types/validator').MultiValidator<any>;
|
|
31
|
+
required?: boolean;
|
|
32
|
+
pattern?: string;
|
|
30
33
|
name: import('@formily/core').FormPathPattern;
|
|
34
|
+
data?: any;
|
|
31
35
|
basePath?: import('@formily/core').FormPathPattern;
|
|
32
36
|
title?: any;
|
|
33
37
|
description?: any;
|
|
34
38
|
value?: any;
|
|
35
39
|
initialValue?: any;
|
|
36
|
-
required?: boolean;
|
|
37
40
|
display?: string;
|
|
38
|
-
pattern?: string;
|
|
39
41
|
hidden?: boolean;
|
|
40
42
|
visible?: boolean;
|
|
41
43
|
editable?: boolean;
|
|
@@ -46,11 +48,9 @@ declare const _default: import('vue').DefineComponent<{
|
|
|
46
48
|
validateFirst?: boolean;
|
|
47
49
|
validatePattern?: import('@formily/core').FieldPatternTypes[];
|
|
48
50
|
validateDisplay?: import('@formily/core').FieldDisplayTypes[];
|
|
49
|
-
validator?: string | import('@formily/validator').ValidatorFunction<import('@formily/core').FieldValidatorContext> | import('@formily/validator').IValidatorRules<import('@formily/core').FieldValidatorContext> | import('@formily/validator').MultiValidator<import('@formily/core').FieldValidatorContext>;
|
|
50
51
|
decorator?: import('@formily/core').FieldDecorator<import('vue').Component, any>;
|
|
51
52
|
component?: import('@formily/core').FieldComponent<import('vue').Component, any>;
|
|
52
53
|
reactions?: import('@formily/core').FieldReaction[] | import('@formily/core').FieldReaction;
|
|
53
54
|
content?: any;
|
|
54
|
-
data?: any;
|
|
55
55
|
}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
56
56
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.mjs","sources":["../../src/components/Field.ts"],"sourcesContent":["import type { IFieldProps, IReactiveFieldProps } from '../types'\nimport { defineComponent, h } from 'vue'\nimport { fieldProps } from '../utils/fieldProps'\nimport { getRawComponent } from '../utils/getRawComponent'\nimport ReactiveField from './ReactiveField'\n\nexport default defineComponent({\n name: 'Field',\n props: fieldProps,\n setup(props: IFieldProps, context) {\n return () => {\n const componentData: IReactiveFieldProps = {\n fieldType: 'Field',\n fieldProps: {\n ...props,\n ...getRawComponent(props),\n },\n }\n return h(ReactiveField, componentData, context.slots)\n }\n },\n})\n"],"names":["Field","defineComponent","fieldProps","props","context","componentData","getRawComponent","h","ReactiveField"],"mappings":";;;;AAMA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAOC;AAAA,EACP,MAAMC,GAAoBC,GAAS;AACjC,WAAO,MAAM;AACX,YAAMC,IAAqC;AAAA,QACzC,WAAW;AAAA,QACX,YAAY;AAAA,UACV,GAAGF;AAAA,UACH,GAAGG,EAAgBH,CAAK;AAAA,QAAA;AAAA,MAC1B;AAEF,aAAOI,EAAEC,GAAeH,GAAeD,EAAQ,KAAK;AAAA,IACtD;AAAA,EACF;AACF,CAAC;"}
|
|
1
|
+
{"version":3,"file":"Field.mjs","sources":["../../src/components/Field.ts"],"sourcesContent":["import type { IFieldProps, IReactiveFieldProps } from '../types'\r\nimport { defineComponent, h } from 'vue'\r\nimport { fieldProps } from '../utils/fieldProps'\r\nimport { getRawComponent } from '../utils/getRawComponent'\r\nimport ReactiveField from './ReactiveField'\r\n\r\nexport default defineComponent({\r\n name: 'Field',\r\n props: fieldProps,\r\n setup(props: IFieldProps, context) {\r\n return () => {\r\n const componentData: IReactiveFieldProps = {\r\n fieldType: 'Field',\r\n fieldProps: {\r\n ...props,\r\n ...getRawComponent(props),\r\n },\r\n }\r\n return h(ReactiveField, componentData, context.slots)\r\n }\r\n },\r\n})\r\n"],"names":["Field","defineComponent","fieldProps","props","context","componentData","getRawComponent","h","ReactiveField"],"mappings":";;;;AAMA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAOC;AAAA,EACP,MAAMC,GAAoBC,GAAS;AACjC,WAAO,MAAM;AACX,YAAMC,IAAqC;AAAA,QACzC,WAAW;AAAA,QACX,YAAY;AAAA,UACV,GAAGF;AAAA,UACH,GAAGG,EAAgBH,CAAK;AAAA,QAAA;AAAA,MAC1B;AAEF,aAAOI,EAAEC,GAAeH,GAAeD,EAAQ,KAAK;AAAA,IACtD;AAAA,EACF;AACF,CAAC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormConsumer.mjs","sources":["../../src/components/FormConsumer.ts"],"sourcesContent":["import { useObserver } from '@formily/reactive-vue'\nimport { defineComponent } from 'vue'\nimport { useForm } from '../hooks'\n\nexport default defineComponent({\n name: 'FormConsumer',\n inheritAttrs: false,\n setup(_, { slots }) {\n useObserver({\n scheduler: update => Promise.resolve().then(update),\n })\n\n const form = useForm()\n\n return () => slots.default?.({ form: form.value }) ?? null\n },\n})\n"],"names":["FormConsumer","defineComponent","_","slots","useObserver","update","form","useForm"],"mappings":";;;;AAIA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,cAAc;AAAA,EACd,MAAMC,GAAG,EAAE,OAAAC,KAAS;AAClB,IAAAC,EAAY;AAAA,MACV,WAAW,CAAAC,MAAU,QAAQ,QAAA,EAAU,KAAKA,CAAM;AAAA,IAAA,CACnD;AAED,UAAMC,IAAOC,EAAA;AAEb,WAAO,MAAMJ,EAAM,UAAU,EAAE,MAAMG,EAAK,MAAA,CAAO,KAAK;AAAA,EACxD;AACF,CAAC;"}
|
|
1
|
+
{"version":3,"file":"FormConsumer.mjs","sources":["../../src/components/FormConsumer.ts"],"sourcesContent":["import { useObserver } from '@formily/reactive-vue'\r\nimport { defineComponent } from 'vue'\r\nimport { useForm } from '../hooks'\r\n\r\nexport default defineComponent({\r\n name: 'FormConsumer',\r\n inheritAttrs: false,\r\n setup(_, { slots }) {\r\n useObserver({\r\n scheduler: update => Promise.resolve().then(update),\r\n })\r\n\r\n const form = useForm()\r\n\r\n return () => slots.default?.({ form: form.value }) ?? null\r\n },\r\n})\r\n"],"names":["FormConsumer","defineComponent","_","slots","useObserver","update","form","useForm"],"mappings":";;;;AAIA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,cAAc;AAAA,EACd,MAAMC,GAAG,EAAE,OAAAC,KAAS;AAClB,IAAAC,EAAY;AAAA,MACV,WAAW,CAAAC,MAAU,QAAQ,QAAA,EAAU,KAAKA,CAAM;AAAA,IAAA,CACnD;AAED,UAAMC,IAAOC,EAAA;AAEb,WAAO,MAAMJ,EAAM,UAAU,EAAE,MAAMG,EAAK,MAAA,CAAO,KAAK;AAAA,EACxD;AACF,CAAC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormProvider.mjs","sources":["../../src/components/FormProvider.ts"],"sourcesContent":["import type { PropType } from 'vue'\nimport type { IProviderProps } from '../types'\nimport { defineComponent, provide, toRef } from 'vue'\nimport { useAttach } from '../hooks/useAttach'\nimport { useInjectionCleaner } from '../hooks/useInjectionCleaner'\nimport {\n FieldSymbol,\n FormSymbol,\n SchemaExpressionScopeSymbol,\n SchemaMarkupSymbol,\n SchemaOptionsSymbol,\n SchemaSymbol,\n} from '../shared/context'\n\nexport default defineComponent({\n name: 'FormProvider',\n props: {\n form: {\n type: Object as PropType<IProviderProps['form']>,\n required: true,\n },\n },\n setup(props, { slots }) {\n const formRef = useAttach(toRef(props, 'form'))\n provide(FormSymbol, formRef)\n useInjectionCleaner([\n FieldSymbol,\n SchemaMarkupSymbol,\n SchemaSymbol,\n SchemaExpressionScopeSymbol,\n SchemaOptionsSymbol,\n ])\n\n return () => slots.default?.()\n },\n})\n"],"names":["FormProvider","defineComponent","props","slots","formRef","useAttach","toRef","provide","FormSymbol","useInjectionCleaner","FieldSymbol","SchemaMarkupSymbol","SchemaSymbol","SchemaExpressionScopeSymbol","SchemaOptionsSymbol"],"mappings":";;;;AAcA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,MAAMC,GAAO,EAAE,OAAAC,KAAS;AACtB,UAAMC,IAAUC,EAAUC,EAAMJ,GAAO,MAAM,CAAC;AAC9C,WAAAK,EAAQC,GAAYJ,CAAO,GAC3BK,EAAoB;AAAA,MAClBC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA,CACD,GAEM,MAAMX,EAAM,UAAA;AAAA,EACrB;AACF,CAAC;"}
|
|
1
|
+
{"version":3,"file":"FormProvider.mjs","sources":["../../src/components/FormProvider.ts"],"sourcesContent":["import type { PropType } from 'vue'\r\nimport type { IProviderProps } from '../types'\r\nimport { defineComponent, provide, toRef } from 'vue'\r\nimport { useAttach } from '../hooks/useAttach'\r\nimport { useInjectionCleaner } from '../hooks/useInjectionCleaner'\r\nimport {\r\n FieldSymbol,\r\n FormSymbol,\r\n SchemaExpressionScopeSymbol,\r\n SchemaMarkupSymbol,\r\n SchemaOptionsSymbol,\r\n SchemaSymbol,\r\n} from '../shared/context'\r\n\r\nexport default defineComponent({\r\n name: 'FormProvider',\r\n props: {\r\n form: {\r\n type: Object as PropType<IProviderProps['form']>,\r\n required: true,\r\n },\r\n },\r\n setup(props, { slots }) {\r\n const formRef = useAttach(toRef(props, 'form'))\r\n provide(FormSymbol, formRef)\r\n useInjectionCleaner([\r\n FieldSymbol,\r\n SchemaMarkupSymbol,\r\n SchemaSymbol,\r\n SchemaExpressionScopeSymbol,\r\n SchemaOptionsSymbol,\r\n ])\r\n\r\n return () => slots.default?.()\r\n },\r\n})\r\n"],"names":["FormProvider","defineComponent","props","slots","formRef","useAttach","toRef","provide","FormSymbol","useInjectionCleaner","FieldSymbol","SchemaMarkupSymbol","SchemaSymbol","SchemaExpressionScopeSymbol","SchemaOptionsSymbol"],"mappings":";;;;AAcA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,MAAMC,GAAO,EAAE,OAAAC,KAAS;AACtB,UAAMC,IAAUC,EAAUC,EAAMJ,GAAO,MAAM,CAAC;AAC9C,WAAAK,EAAQC,GAAYJ,CAAO,GAC3BK,EAAoB;AAAA,MAClBC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA,CACD,GAEM,MAAMX,EAAM,UAAA;AAAA,EACrB;AACF,CAAC;"}
|
|
@@ -20,7 +20,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
20
20
|
readonly dataSource: import('../utils/runtimeProps').RuntimeProp<import('@formily/core').FieldDataSource>;
|
|
21
21
|
readonly validatePattern: import('../utils/runtimeProps').RuntimeProp<import('@formily/core').FieldPatternTypes[]>;
|
|
22
22
|
readonly validateDisplay: import('../utils/runtimeProps').RuntimeProp<import('@formily/core').FieldDisplayTypes[]>;
|
|
23
|
-
readonly validator: import('../utils/runtimeProps').RuntimeProp<import('
|
|
23
|
+
readonly validator: import('../utils/runtimeProps').RuntimeProp<import('..').SchemaFieldValidator>;
|
|
24
24
|
readonly reactions: import('../utils/runtimeProps').RuntimeProp<import('@formily/core').FieldReaction | import('@formily/core').FieldReaction[]>;
|
|
25
25
|
readonly content: import('../utils/runtimeProps').RuntimeProp<any>;
|
|
26
26
|
readonly data: import('../utils/runtimeProps').RuntimeProp<any>;
|
|
@@ -48,7 +48,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
48
48
|
readonly dataSource: import('../utils/runtimeProps').RuntimeProp<import('@formily/core').FieldDataSource>;
|
|
49
49
|
readonly validatePattern: import('../utils/runtimeProps').RuntimeProp<import('@formily/core').FieldPatternTypes[]>;
|
|
50
50
|
readonly validateDisplay: import('../utils/runtimeProps').RuntimeProp<import('@formily/core').FieldDisplayTypes[]>;
|
|
51
|
-
readonly validator: import('../utils/runtimeProps').RuntimeProp<import('
|
|
51
|
+
readonly validator: import('../utils/runtimeProps').RuntimeProp<import('..').SchemaFieldValidator>;
|
|
52
52
|
readonly reactions: import('../utils/runtimeProps').RuntimeProp<import('@formily/core').FieldReaction | import('@formily/core').FieldReaction[]>;
|
|
53
53
|
readonly content: import('../utils/runtimeProps').RuntimeProp<any>;
|
|
54
54
|
readonly data: import('../utils/runtimeProps').RuntimeProp<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectField.mjs","sources":["../../src/components/ObjectField.ts"],"sourcesContent":["import { defineComponent, h } from 'vue'\nimport { fieldProps } from '../utils/fieldProps'\nimport { getRawComponent } from '../utils/getRawComponent'\nimport ReactiveField from './ReactiveField'\n\nexport default defineComponent({\n name: 'ObjectField',\n props: fieldProps,\n setup(props, { slots }) {\n return () => {\n const componentData = {\n fieldType: 'ObjectField',\n fieldProps: {\n ...props,\n ...getRawComponent(props),\n },\n }\n return h(ReactiveField, componentData, slots)\n }\n },\n})\n"],"names":["ObjectField","defineComponent","fieldProps","props","slots","componentData","getRawComponent","h","ReactiveField"],"mappings":";;;;AAKA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAOC;AAAA,EACP,MAAMC,GAAO,EAAE,OAAAC,KAAS;AACtB,WAAO,MAAM;AACX,YAAMC,IAAgB;AAAA,QACpB,WAAW;AAAA,QACX,YAAY;AAAA,UACV,GAAGF;AAAA,UACH,GAAGG,EAAgBH,CAAK;AAAA,QAAA;AAAA,MAC1B;AAEF,aAAOI,EAAEC,GAAeH,GAAeD,CAAK;AAAA,IAC9C;AAAA,EACF;AACF,CAAC;"}
|
|
1
|
+
{"version":3,"file":"ObjectField.mjs","sources":["../../src/components/ObjectField.ts"],"sourcesContent":["import { defineComponent, h } from 'vue'\r\nimport { fieldProps } from '../utils/fieldProps'\r\nimport { getRawComponent } from '../utils/getRawComponent'\r\nimport ReactiveField from './ReactiveField'\r\n\r\nexport default defineComponent({\r\n name: 'ObjectField',\r\n props: fieldProps,\r\n setup(props, { slots }) {\r\n return () => {\r\n const componentData = {\r\n fieldType: 'ObjectField',\r\n fieldProps: {\r\n ...props,\r\n ...getRawComponent(props),\r\n },\r\n }\r\n return h(ReactiveField, componentData, slots)\r\n }\r\n },\r\n})\r\n"],"names":["ObjectField","defineComponent","fieldProps","props","slots","componentData","getRawComponent","h","ReactiveField"],"mappings":";;;;AAKA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAOC;AAAA,EACP,MAAMC,GAAO,EAAE,OAAAC,KAAS;AACtB,WAAO,MAAM;AACX,YAAMC,IAAgB;AAAA,QACpB,WAAW;AAAA,QACX,YAAY;AAAA,UACV,GAAGF;AAAA,UACH,GAAGG,EAAgBH,CAAK;AAAA,QAAA;AAAA,MAC1B;AAEF,aAAOI,EAAEC,GAAeH,GAAeD,CAAK;AAAA,IAC9C;AAAA,EACF;AACF,CAAC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactiveField.mjs","sources":["../../src/components/ReactiveField.ts"],"sourcesContent":["import type { GeneralField } from '@formily/core'\nimport type { Ref, VNode } from 'vue'\nimport type { IReactiveFieldProps } from '../types'\nimport { isVoidField } from '@formily/core'\nimport { toJS } from '@formily/reactive'\nimport { useObserver } from '@formily/reactive-vue'\nimport { FormPath } from '@formily/shared'\nimport { defineComponent, h, inject, provide, ref, shallowRef, watch } from 'vue'\nimport { useField, useForm } from '../hooks'\nimport { useAttach } from '../hooks/useAttach'\n\nimport { FieldSymbol, SchemaOptionsSymbol } from '../shared'\nimport { createVNodeProps, extractAttrsAndEvents, mergeSlots, wrapFragment } from '../utils/reactiveFieldHelpers'\n\ntype ComponentEventArgs = unknown[]\ntype ComponentEventHandler = (...args: ComponentEventArgs) => unknown\n\nexport default defineComponent({\n name: 'ReactiveField',\n props: {\n fieldType: {\n type: String,\n default: 'Field',\n },\n fieldProps: {\n type: Object,\n default: () => ({}),\n },\n },\n setup(props: IReactiveFieldProps, { slots }) {\n const formRef = useForm()\n const parentRef = useField()\n const optionsRef = inject(SchemaOptionsSymbol, ref())\n\n useObserver()\n\n const createField = () =>\n formRef?.value?.[`create${props.fieldType}`]?.({\n ...props.fieldProps,\n basePath: props.fieldProps?.basePath ?? parentRef.value?.address,\n })\n\n const fieldRef = shallowRef(createField()) as Ref<GeneralField>\n\n watch(\n () => props.fieldProps,\n () => (fieldRef.value = createField()),\n )\n\n useAttach(fieldRef)\n provide(FieldSymbol, fieldRef)\n\n return () => {\n const field = fieldRef.value\n const options = optionsRef.value\n\n if (!field) {\n return slots.default?.()\n }\n\n if (field.display !== 'visible') {\n return null\n }\n\n const mergedSlots = mergeSlots(field, slots, field.content)\n\n const renderDecorator = (childNodes: Array<VNode | null | undefined>) => {\n const normalizedChildren = childNodes.filter(child => child != null) as VNode[]\n if (!field.decoratorType) {\n return wrapFragment(normalizedChildren)\n }\n\n const finalComponent\n = FormPath.getIn(options?.components, field.decoratorType as string) ?? field.decoratorType\n const decoratorEntry = Array.isArray(field.decorator) ? field.decorator[1] : undefined\n const decoratorAttrs = toJS(decoratorEntry) || {}\n const { attrs, events } = extractAttrsAndEvents(decoratorAttrs)\n const decoratorProps = createVNodeProps(attrs, events)\n\n return h(finalComponent, decoratorProps, {\n default: () => normalizedChildren,\n })\n }\n\n const renderComponent = (): VNode | null => {\n if (!field.componentType) {\n return wrapFragment(mergedSlots?.default?.())\n }\n\n const component\n = FormPath.getIn(options?.components, field.componentType as string) ?? field.componentType\n\n const componentEntry = Array.isArray(field.component) ? field.component[1] : undefined\n const originData = toJS(componentEntry) || {}\n const fieldValue = !isVoidField(field) ? field.value : undefined\n const composedAttrs = {\n disabled: !isVoidField(field)\n ? field.pattern === 'disabled' || field.pattern === 'readPretty'\n : undefined,\n readOnly: !isVoidField(field) ? field.pattern === 'readOnly' : undefined,\n ...originData,\n modelValue: fieldValue,\n }\n const { attrs, events } = extractAttrsAndEvents(composedAttrs)\n const modelUpdateHandler: ComponentEventHandler | undefined = events['update:modelValue']\n const focusHandler: ComponentEventHandler | undefined = events.focus\n const blurHandler: ComponentEventHandler | undefined = events.blur\n\n const emitInput = (...args: ComponentEventArgs) => {\n if (!isVoidField(field)) {\n field.onInput(...(args as Parameters<typeof field.onInput>))\n }\n }\n\n events['update:modelValue'] = (...args: ComponentEventArgs) => {\n emitInput(...args)\n modelUpdateHandler?.(...args)\n }\n events.focus = (...args: ComponentEventArgs) => {\n if (!isVoidField(field)) {\n field.onFocus(...(args as Parameters<typeof field.onFocus>))\n }\n focusHandler?.(...args)\n }\n events.blur = (...args: ComponentEventArgs) => {\n if (!isVoidField(field)) {\n field.onBlur(...(args as Parameters<typeof field.onBlur>))\n }\n blurHandler?.(...args)\n }\n\n const componentProps = createVNodeProps(attrs, events)\n return h(component, componentProps, mergedSlots)\n }\n\n return renderDecorator([renderComponent()])\n }\n },\n})\n"],"names":["ReactiveField","defineComponent","props","slots","formRef","useForm","parentRef","useField","optionsRef","inject","SchemaOptionsSymbol","ref","useObserver","createField","fieldRef","shallowRef","watch","useAttach","provide","FieldSymbol","field","options","mergedSlots","mergeSlots","childNodes","normalizedChildren","child","wrapFragment","finalComponent","FormPath","decoratorEntry","decoratorAttrs","toJS","attrs","events","extractAttrsAndEvents","decoratorProps","createVNodeProps","component","componentEntry","originData","fieldValue","isVoidField","composedAttrs","modelUpdateHandler","focusHandler","blurHandler","emitInput","args","componentProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReactiveField.mjs","sources":["../../src/components/ReactiveField.ts"],"sourcesContent":["import type { GeneralField } from '@formily/core'\r\nimport type { Ref, VNode } from 'vue'\r\nimport type { IReactiveFieldProps } from '../types'\r\nimport { isVoidField } from '@formily/core'\r\nimport { toJS } from '@formily/reactive'\r\nimport { useObserver } from '@formily/reactive-vue'\r\nimport { FormPath } from '@formily/shared'\r\nimport { defineComponent, h, inject, provide, ref, shallowRef, watch } from 'vue'\r\nimport { useField, useForm } from '../hooks'\r\nimport { useAttach } from '../hooks/useAttach'\r\n\r\nimport { FieldSymbol, SchemaOptionsSymbol } from '../shared'\r\nimport { createVNodeProps, extractAttrsAndEvents, mergeSlots, wrapFragment } from '../utils/reactiveFieldHelpers'\r\n\r\ntype ComponentEventArgs = unknown[]\r\ntype ComponentEventHandler = (...args: ComponentEventArgs) => unknown\r\n\r\nexport default defineComponent({\r\n name: 'ReactiveField',\r\n props: {\r\n fieldType: {\r\n type: String,\r\n default: 'Field',\r\n },\r\n fieldProps: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n },\r\n setup(props: IReactiveFieldProps, { slots }) {\r\n const formRef = useForm()\r\n const parentRef = useField()\r\n const optionsRef = inject(SchemaOptionsSymbol, ref())\r\n\r\n useObserver()\r\n\r\n const createField = () =>\r\n formRef?.value?.[`create${props.fieldType}`]?.({\r\n ...props.fieldProps,\r\n basePath: props.fieldProps?.basePath ?? parentRef.value?.address,\r\n })\r\n\r\n const fieldRef = shallowRef(createField()) as Ref<GeneralField>\r\n\r\n watch(\r\n () => props.fieldProps,\r\n () => (fieldRef.value = createField()),\r\n )\r\n\r\n useAttach(fieldRef)\r\n provide(FieldSymbol, fieldRef)\r\n\r\n return () => {\r\n const field = fieldRef.value\r\n const options = optionsRef.value\r\n\r\n if (!field) {\r\n return slots.default?.()\r\n }\r\n\r\n if (field.display !== 'visible') {\r\n return null\r\n }\r\n\r\n const mergedSlots = mergeSlots(field, slots, field.content)\r\n\r\n const renderDecorator = (childNodes: Array<VNode | null | undefined>) => {\r\n const normalizedChildren = childNodes.filter(child => child != null) as VNode[]\r\n if (!field.decoratorType) {\r\n return wrapFragment(normalizedChildren)\r\n }\r\n\r\n const finalComponent\r\n = FormPath.getIn(options?.components, field.decoratorType as string) ?? field.decoratorType\r\n const decoratorEntry = Array.isArray(field.decorator) ? field.decorator[1] : undefined\r\n const decoratorAttrs = toJS(decoratorEntry) || {}\r\n const { attrs, events } = extractAttrsAndEvents(decoratorAttrs)\r\n const decoratorProps = createVNodeProps(attrs, events)\r\n\r\n return h(finalComponent, decoratorProps, {\r\n default: () => normalizedChildren,\r\n })\r\n }\r\n\r\n const renderComponent = (): VNode | null => {\r\n if (!field.componentType) {\r\n return wrapFragment(mergedSlots?.default?.())\r\n }\r\n\r\n const component\r\n = FormPath.getIn(options?.components, field.componentType as string) ?? field.componentType\r\n\r\n const componentEntry = Array.isArray(field.component) ? field.component[1] : undefined\r\n const originData = toJS(componentEntry) || {}\r\n const fieldValue = !isVoidField(field) ? field.value : undefined\r\n const composedAttrs = {\r\n disabled: !isVoidField(field)\r\n ? field.pattern === 'disabled' || field.pattern === 'readPretty'\r\n : undefined,\r\n readOnly: !isVoidField(field) ? field.pattern === 'readOnly' : undefined,\r\n ...originData,\r\n modelValue: fieldValue,\r\n }\r\n const { attrs, events } = extractAttrsAndEvents(composedAttrs)\r\n const modelUpdateHandler: ComponentEventHandler | undefined = events['update:modelValue']\r\n const focusHandler: ComponentEventHandler | undefined = events.focus\r\n const blurHandler: ComponentEventHandler | undefined = events.blur\r\n\r\n const emitInput = (...args: ComponentEventArgs) => {\r\n if (!isVoidField(field)) {\r\n field.onInput(...(args as Parameters<typeof field.onInput>))\r\n }\r\n }\r\n\r\n events['update:modelValue'] = (...args: ComponentEventArgs) => {\r\n emitInput(...args)\r\n modelUpdateHandler?.(...args)\r\n }\r\n events.focus = (...args: ComponentEventArgs) => {\r\n if (!isVoidField(field)) {\r\n field.onFocus(...(args as Parameters<typeof field.onFocus>))\r\n }\r\n focusHandler?.(...args)\r\n }\r\n events.blur = (...args: ComponentEventArgs) => {\r\n if (!isVoidField(field)) {\r\n field.onBlur(...(args as Parameters<typeof field.onBlur>))\r\n }\r\n blurHandler?.(...args)\r\n }\r\n\r\n const componentProps = createVNodeProps(attrs, events)\r\n return h(component, componentProps, mergedSlots)\r\n }\r\n\r\n return renderDecorator([renderComponent()])\r\n }\r\n },\r\n})\r\n"],"names":["ReactiveField","defineComponent","props","slots","formRef","useForm","parentRef","useField","optionsRef","inject","SchemaOptionsSymbol","ref","useObserver","createField","fieldRef","shallowRef","watch","useAttach","provide","FieldSymbol","field","options","mergedSlots","mergeSlots","childNodes","normalizedChildren","child","wrapFragment","finalComponent","FormPath","decoratorEntry","decoratorAttrs","toJS","attrs","events","extractAttrsAndEvents","decoratorProps","createVNodeProps","component","componentEntry","originData","fieldValue","isVoidField","composedAttrs","modelUpdateHandler","focusHandler","blurHandler","emitInput","args","componentProps"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecursionField.mjs","sources":["../../src/components/RecursionField.ts"],"sourcesContent":["import type { GeneralField } from '@formily/core'\nimport type { Slots, VNode } from 'vue'\nimport type { IRecursionFieldProps, SchemaExpressionScope } from '../types'\nimport { Schema } from '@formily/json-schema'\nimport { isFn, isValid, lazyMerge } from '@formily/shared'\nimport { computed, defineComponent, Fragment, h, inject, markRaw, provide, shallowRef, watch } from 'vue'\nimport { useField } from '../hooks'\nimport { SchemaExpressionScopeSymbol, SchemaOptionsSymbol, SchemaSymbol } from '../shared'\nimport { recursionFieldProps } from '../utils/recursionFieldProps'\nimport ArrayField from './ArrayField'\nimport Field from './Field'\n\nimport ObjectField from './ObjectField'\nimport VoidField from './VoidField'\n\ntype PropertyRenderFn = (field?: GeneralField) => VNode\ninterface ScopedSlotPayload { field?: GeneralField }\ntype SlotRender = (payload?: ScopedSlotPayload) => VNode[] | undefined\ntype SlotMap = Record<string, SlotRender>\n\nfunction resolveEmptySlot(slots: SlotMap) {\n const slotKeys = Object.keys(slots)\n if (!slotKeys.length)\n return undefined\n const children = slotKeys.reduce<VNode[]>((acc, key) => {\n const slot = slots[key]\n if (!slot)\n return acc\n const result = slot()\n if (!result?.length)\n return acc\n const validChildren = result.filter(child => isValid(child))\n acc.push(...validChildren)\n return acc\n }, [])\n if (!children.length)\n return undefined\n return h(Fragment, null, children)\n}\n\nconst RecursionField = defineComponent({\n name: 'RecursionField',\n inheritAttrs: false,\n props: recursionFieldProps,\n setup(props: IRecursionFieldProps) {\n const parentRef = useField()\n const optionsRef = inject(SchemaOptionsSymbol)\n const scopeRef = inject(SchemaExpressionScopeSymbol)\n\n if (!optionsRef || !scopeRef) {\n throw new Error('RecursionField must be used under SchemaField.')\n }\n const createSchema = (schemaProp: IRecursionFieldProps['schema']) =>\n markRaw(Schema.isSchemaInstance(schemaProp) ? schemaProp : new Schema(schemaProp))\n const fieldSchemaRef = computed(() => createSchema(props.schema))\n\n const getPropsFromSchema = (schema: Schema) =>\n schema?.toFieldProps?.({\n ...optionsRef.value,\n get scope() {\n return lazyMerge(\n {} as SchemaExpressionScope,\n optionsRef.value.scope ?? {},\n scopeRef.value,\n )\n },\n })\n const fieldPropsRef = shallowRef(getPropsFromSchema(fieldSchemaRef.value))\n\n watch([fieldSchemaRef, optionsRef], () => {\n fieldPropsRef.value = getPropsFromSchema(fieldSchemaRef.value)\n })\n\n const getBasePath = () => {\n if (props.onlyRenderProperties) {\n return props.basePath ?? parentRef?.value?.address.concat(props.name!)\n }\n return props.basePath ?? parentRef?.value?.address\n }\n\n provide(SchemaSymbol, fieldSchemaRef)\n\n return () => {\n const basePath = getBasePath()\n const fieldProps = fieldPropsRef.value\n\n const generateSlotsByProperties = (scoped = false): SlotMap => {\n if (props.onlyRenderSelf)\n return {}\n const properties = Schema.getOrderProperties(fieldSchemaRef.value)\n if (!properties.length)\n return {}\n const renderMap: Record<string, PropertyRenderFn[]> = {}\n const setRender = (key: string, value: PropertyRenderFn) => {\n if (!renderMap[key]) {\n renderMap[key] = []\n }\n renderMap[key].push(value)\n }\n for (const [index, { schema: item, key: name }] of properties.entries()) {\n let schema: Schema = item\n if (isFn(props.mapProperties)) {\n const mapped = props.mapProperties(item, name)\n if (mapped) {\n schema = mapped\n }\n }\n if (isFn(props.filterProperties) && props.filterProperties(schema, name) === false) {\n continue\n }\n setRender(schema['x-slot'] ?? 'default', (field?: GeneralField) =>\n h(RecursionField, {\n key: `${index}-${name}`,\n schema,\n name,\n basePath: field?.address ?? basePath,\n slot: schema['x-slot'],\n }))\n }\n const slots: SlotMap = {}\n for (const key of Object.keys(renderMap)) {\n const renderFns = renderMap[key]\n const slotRender: SlotRender = scoped\n ? payload => renderFns!.map(fn => fn(payload?.field))\n : () => renderFns!.map(fn => fn())\n slots[key] = slotRender\n }\n return slots\n }\n\n const render = () => {\n if (!isValid(props.name))\n return resolveEmptySlot(generateSlotsByProperties())\n if (fieldSchemaRef.value.type === 'object') {\n if (props.onlyRenderProperties)\n return resolveEmptySlot(generateSlotsByProperties())\n return h(\n ObjectField,\n {\n ...fieldProps,\n name: props.name!,\n basePath,\n },\n generateSlotsByProperties(true) as Slots,\n )\n }\n else if (fieldSchemaRef.value.type === 'array') {\n return h(ArrayField, {\n ...fieldProps,\n name: props.name!,\n basePath,\n })\n }\n else if (fieldSchemaRef.value.type === 'void') {\n if (props.onlyRenderProperties)\n return resolveEmptySlot(generateSlotsByProperties())\n const slots = generateSlotsByProperties(true)\n return h(\n VoidField,\n {\n ...fieldProps,\n name: props.name!,\n basePath,\n },\n slots as Slots,\n )\n }\n\n return h(Field, {\n ...fieldProps,\n name: props.name!,\n basePath,\n })\n }\n\n if (!fieldSchemaRef.value)\n return\n\n return render()\n }\n },\n})\n\nexport default RecursionField\n"],"names":["resolveEmptySlot","slots","slotKeys","children","acc","key","slot","result","validChildren","child","isValid","h","Fragment","RecursionField","defineComponent","recursionFieldProps","props","parentRef","useField","optionsRef","inject","SchemaOptionsSymbol","scopeRef","SchemaExpressionScopeSymbol","createSchema","schemaProp","markRaw","Schema","fieldSchemaRef","computed","getPropsFromSchema","schema","lazyMerge","fieldPropsRef","shallowRef","watch","getBasePath","provide","SchemaSymbol","basePath","fieldProps","generateSlotsByProperties","scoped","properties","renderMap","setRender","value","index","item","name","isFn","mapped","field","renderFns","slotRender","payload","fn","render","ObjectField","ArrayField","VoidField","Field"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RecursionField.mjs","sources":["../../src/components/RecursionField.ts"],"sourcesContent":["import type { GeneralField } from '@formily/core'\r\nimport type { Slots, VNode } from 'vue'\r\nimport type { IRecursionFieldProps, SchemaExpressionScope } from '../types'\r\nimport { Schema } from '@formily/json-schema'\r\nimport { isFn, isValid, lazyMerge } from '@formily/shared'\r\nimport { computed, defineComponent, Fragment, h, inject, markRaw, provide, shallowRef, watch } from 'vue'\r\nimport { useField } from '../hooks'\r\nimport { SchemaExpressionScopeSymbol, SchemaOptionsSymbol, SchemaSymbol } from '../shared'\r\nimport { recursionFieldProps } from '../utils/recursionFieldProps'\r\nimport ArrayField from './ArrayField'\r\nimport Field from './Field'\r\n\r\nimport ObjectField from './ObjectField'\r\nimport VoidField from './VoidField'\r\n\r\ntype PropertyRenderFn = (field?: GeneralField) => VNode\r\ninterface ScopedSlotPayload { field?: GeneralField }\r\ntype SlotRender = (payload?: ScopedSlotPayload) => VNode[] | undefined\r\ntype SlotMap = Record<string, SlotRender>\r\n\r\nfunction resolveEmptySlot(slots: SlotMap) {\r\n const slotKeys = Object.keys(slots)\r\n if (!slotKeys.length)\r\n return undefined\r\n const children = slotKeys.reduce<VNode[]>((acc, key) => {\r\n const slot = slots[key]\r\n if (!slot)\r\n return acc\r\n const result = slot()\r\n if (!result?.length)\r\n return acc\r\n const validChildren = result.filter(child => isValid(child))\r\n acc.push(...validChildren)\r\n return acc\r\n }, [])\r\n if (!children.length)\r\n return undefined\r\n return h(Fragment, null, children)\r\n}\r\n\r\nconst RecursionField = defineComponent({\r\n name: 'RecursionField',\r\n inheritAttrs: false,\r\n props: recursionFieldProps,\r\n setup(props: IRecursionFieldProps) {\r\n const parentRef = useField()\r\n const optionsRef = inject(SchemaOptionsSymbol)\r\n const scopeRef = inject(SchemaExpressionScopeSymbol)\r\n\r\n if (!optionsRef || !scopeRef) {\r\n throw new Error('RecursionField must be used under SchemaField.')\r\n }\r\n const createSchema = (schemaProp: IRecursionFieldProps['schema']) =>\r\n markRaw(Schema.isSchemaInstance(schemaProp) ? schemaProp : new Schema(schemaProp))\r\n const fieldSchemaRef = computed(() => createSchema(props.schema))\r\n\r\n const getPropsFromSchema = (schema: Schema) =>\r\n schema?.toFieldProps?.({\r\n ...optionsRef.value,\r\n get scope() {\r\n return lazyMerge(\r\n {} as SchemaExpressionScope,\r\n optionsRef.value.scope ?? {},\r\n scopeRef.value,\r\n )\r\n },\r\n })\r\n const fieldPropsRef = shallowRef(getPropsFromSchema(fieldSchemaRef.value))\r\n\r\n watch([fieldSchemaRef, optionsRef], () => {\r\n fieldPropsRef.value = getPropsFromSchema(fieldSchemaRef.value)\r\n })\r\n\r\n const getBasePath = () => {\r\n if (props.onlyRenderProperties) {\r\n return props.basePath ?? parentRef?.value?.address.concat(props.name!)\r\n }\r\n return props.basePath ?? parentRef?.value?.address\r\n }\r\n\r\n provide(SchemaSymbol, fieldSchemaRef)\r\n\r\n return () => {\r\n const basePath = getBasePath()\r\n const fieldProps = fieldPropsRef.value\r\n\r\n const generateSlotsByProperties = (scoped = false): SlotMap => {\r\n if (props.onlyRenderSelf)\r\n return {}\r\n const properties = Schema.getOrderProperties(fieldSchemaRef.value)\r\n if (!properties.length)\r\n return {}\r\n const renderMap: Record<string, PropertyRenderFn[]> = {}\r\n const setRender = (key: string, value: PropertyRenderFn) => {\r\n if (!renderMap[key]) {\r\n renderMap[key] = []\r\n }\r\n renderMap[key].push(value)\r\n }\r\n for (const [index, { schema: item, key: name }] of properties.entries()) {\r\n let schema: Schema = item\r\n if (isFn(props.mapProperties)) {\r\n const mapped = props.mapProperties(item, name)\r\n if (mapped) {\r\n schema = mapped\r\n }\r\n }\r\n if (isFn(props.filterProperties) && props.filterProperties(schema, name) === false) {\r\n continue\r\n }\r\n setRender(schema['x-slot'] ?? 'default', (field?: GeneralField) =>\r\n h(RecursionField, {\r\n key: `${index}-${name}`,\r\n schema,\r\n name,\r\n basePath: field?.address ?? basePath,\r\n slot: schema['x-slot'],\r\n }))\r\n }\r\n const slots: SlotMap = {}\r\n for (const key of Object.keys(renderMap)) {\r\n const renderFns = renderMap[key]\r\n const slotRender: SlotRender = scoped\r\n ? payload => renderFns!.map(fn => fn(payload?.field))\r\n : () => renderFns!.map(fn => fn())\r\n slots[key] = slotRender\r\n }\r\n return slots\r\n }\r\n\r\n const render = () => {\r\n if (!isValid(props.name))\r\n return resolveEmptySlot(generateSlotsByProperties())\r\n if (fieldSchemaRef.value.type === 'object') {\r\n if (props.onlyRenderProperties)\r\n return resolveEmptySlot(generateSlotsByProperties())\r\n return h(\r\n ObjectField,\r\n {\r\n ...fieldProps,\r\n name: props.name!,\r\n basePath,\r\n },\r\n generateSlotsByProperties(true) as Slots,\r\n )\r\n }\r\n else if (fieldSchemaRef.value.type === 'array') {\r\n return h(ArrayField, {\r\n ...fieldProps,\r\n name: props.name!,\r\n basePath,\r\n })\r\n }\r\n else if (fieldSchemaRef.value.type === 'void') {\r\n if (props.onlyRenderProperties)\r\n return resolveEmptySlot(generateSlotsByProperties())\r\n const slots = generateSlotsByProperties(true)\r\n return h(\r\n VoidField,\r\n {\r\n ...fieldProps,\r\n name: props.name!,\r\n basePath,\r\n },\r\n slots as Slots,\r\n )\r\n }\r\n\r\n return h(Field, {\r\n ...fieldProps,\r\n name: props.name!,\r\n basePath,\r\n })\r\n }\r\n\r\n if (!fieldSchemaRef.value)\r\n return\r\n\r\n return render()\r\n }\r\n },\r\n})\r\n\r\nexport default RecursionField\r\n"],"names":["resolveEmptySlot","slots","slotKeys","children","acc","key","slot","result","validChildren","child","isValid","h","Fragment","RecursionField","defineComponent","recursionFieldProps","props","parentRef","useField","optionsRef","inject","SchemaOptionsSymbol","scopeRef","SchemaExpressionScopeSymbol","createSchema","schemaProp","markRaw","Schema","fieldSchemaRef","computed","getPropsFromSchema","schema","lazyMerge","fieldPropsRef","shallowRef","watch","getBasePath","provide","SchemaSymbol","basePath","fieldProps","generateSlotsByProperties","scoped","properties","renderMap","setRender","value","index","item","name","isFn","mapped","field","renderFns","slotRender","payload","fn","render","ObjectField","ArrayField","VoidField","Field"],"mappings":"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"}
|