{"version":3,"file":"index.mjs","sources":["../../../../../packages/formily/json-schema/index.ts"],"sourcesContent":["import { computed, defineComponent, h, ref } from 'vue'\nimport { ElSpace } from 'element-plus'\nimport { createForm } from '@formily/core'\nimport { createSchemaField, useForm } from '@formily/vue'\n\nimport Form from '../form'\nimport FormLayout from '../form-layout'\nimport FormItem from '../form-item'\nimport FormGrid from '../form-grid'\nimport Submit from '../submit'\nimport Reset from '../reset'\nimport Input from '../input'\nimport InputNumber from '../input-number'\nimport Select from '../select'\nimport DatePicker from '../date-picker'\nimport TimePicker from '../time-picker'\nimport Radio from '../radio'\nimport Checkbox from '../checkbox'\nimport Switch from '../switch'\nimport Cascader from '../cascader'\nimport TreeSelect from '../tree-select'\nimport SelectV2 from '../select-v2'\nimport Slider from '../slider'\nimport Mention from '../mention'\nimport Actions from './actions'\n\nimport type { Component } from 'vue'\n\nexport type SubmitFunction<T> = (\n  onSubmit?: (values: any) => Promise<T> | void\n) => Promise<T>\n\nexport type FormSubmit<T> = (\n  onSubmit?: (values: any) => Promise<T> | void,\n  scrollToError?: boolean\n) => Promise<T>\n\nconst defaultComponents = {\n  Form,\n  FormItem,\n  FormGrid,\n  FormLayout,\n  Submit,\n  Reset,\n  Input,\n  InputNumber,\n  Select,\n  DatePicker,\n  TimePicker,\n  Radio,\n  Checkbox,\n  Switch,\n  Cascader,\n  Actions,\n  TreeSelect,\n  SelectV2,\n  Slider,\n  Mention,\n  Space: ElSpace,\n}\n\nconst staticKlass = 'json-schema__form'\n\nexport const JsonSchema = defineComponent({\n  name: 'JsonSchema',\n  inheritAttrs: false,\n  props: {\n    iFormProps: {\n      type: Object,\n      default: () => ({}),\n    },\n    components: {\n      type: Object,\n    },\n    scope: {\n      type: Object,\n    },\n    schema: {\n      type: Object,\n    },\n    forceCreateForm: {\n      type: Boolean,\n      default: false,\n    },\n    // 该属性弃用，请使用 components 和 scope属性，保留为了兼容之前的使用姿势\n    iSchemaFieldVueFactoryOptions: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n  setup(props, { attrs, expose }) {\n    const formRef = useForm()\n    const containerRef = ref()\n\n    const hasTopForm = computed(() => !props.forceCreateForm && !!formRef.value)\n\n    const fields = computed(() => {\n      const { components, scope, iSchemaFieldVueFactoryOptions } = props\n      return createSchemaField({\n        components: {\n          ...defaultComponents,\n          ...components,\n          ...iSchemaFieldVueFactoryOptions?.components,\n        },\n        scope: scope ? scope : iSchemaFieldVueFactoryOptions?.scope ?? {},\n      })\n    })\n\n    const handleScrollToError = () => {\n      const container = containerRef.value\n      if (container) {\n        const elements = container.querySelectorAll('.fep-form-item-error-help')\n        if (elements && elements.length) {\n          const formItemEle = elements[0]?.parentElement?.parentElement // fep-form-item-control -> fep-form-item\n          formItemEle?.scrollIntoView?.({\n            behavior: 'smooth',\n            block: 'nearest',\n            inline: 'nearest',\n          })\n        }\n      }\n    }\n\n    const submit = (originSubmit: SubmitFunction<any>) => {\n      return <T>(\n        onSubmit?: (values: any) => Promise<T> | void,\n        scrollToError?: boolean\n      ): Promise<T> => {\n        return originSubmit(onSubmit)?.catch((e: any) => {\n          if (scrollToError) handleScrollToError()\n          throw e\n        })\n      }\n    }\n\n    const form = computed(() => {\n      return hasTopForm.value ? formRef.value : createForm(props.iFormProps)\n    })\n\n    // 重写 form实例 的submit方法，用于是否滚动到错误元素\n    if (form.value) {\n      const originSubmit = form.value.submit\n      form.value.submit = submit(originSubmit)\n    }\n\n    expose({ formInstance: form.value })\n\n    return () => {\n      const { schema } = props\n      const { SchemaField } = fields.value\n\n      return h(\n        'div',\n        {\n          class: staticKlass,\n          ref: containerRef,\n        },\n        [\n          h(\n            Form as Component,\n            {\n              colon: false,\n              component: 'div',\n              ...attrs,\n              form: form.value,\n            },\n            {\n              default: () => h(SchemaField, { schema }),\n            }\n          ),\n        ]\n      )\n    }\n  },\n})\n\nexport default JsonSchema\n"],"names":[],"mappings":"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"}