{"version":3,"file":"form.mjs","sources":["../../../../../packages/components/form/src/form.ts"],"sourcesContent":["import type { ComponentSize } from '@element-ultra/shared'\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { ResponsiveCols } from '@element-ultra/components/grid'\nimport type Form from './form.vue'\nexport type ModelValue = string | number | any[] | boolean\n\nexport interface FormModelItem<V = any> {\n  /** 表单默认值 */\n  value?: V\n  /** 必填 */\n  required?: boolean | [boolean, string]\n  /** 指定长度 */\n  len?: number | [number, string]\n  /** 最小值或最小长度 */\n  min?: number | [number, string]\n  /** 最大值或最大长度 */\n  max?: number | [number, string]\n  /** 匹配正则表达式 */\n  match?: RegExp | [RegExp, string]\n  /** 自定义验证器 */\n  validator?(\n    value: any,\n    model: Record<string, any>,\n    rule: FormRules[string]\n  ): string | Promise<string>\n  /** 子对象 */\n  children?: Record<string, FormModelItem>\n}\n\nexport type FormRules = Record<string, Omit<FormModelItem, 'value'>>\n\nexport type FormModel = Record<string, FormModelItem>\n\nexport const formProps = {\n  data: {\n    type: Object as PropType<Record<string, any>>\n  },\n  defaultData: {\n    type: Object as PropType<Record<string, any>>\n  },\n  rules: {\n    type: Object as PropType<FormRules>\n  },\n  labelPosition: String as PropType<'left' | 'right' | 'top'>,\n  labelWidth: {\n    type: [String, Number],\n    default: ''\n  },\n  labelSuffix: {\n    type: String,\n    default: ''\n  },\n  cols: {\n    type: [Number, Array, String, Object] as PropType<\n      string[] | number | string | ResponsiveCols\n    >,\n    default: () => ({ cols: 3, xs: 1, s: 2, l: 2, xl: 3 })\n  },\n  size: String as PropType<ComponentSize>,\n  disabled: Boolean\n}\n\nexport type FormProps = ExtractPropTypes<typeof formProps>\n\nexport const formComponents = new Set([\n  'ElInput',\n  'ElGridInput',\n  'ElInputNumber',\n  'ElTextarea',\n  'ElSwitch',\n  'ElSelect',\n  'ElDatePicker',\n  'ElTimePicker',\n  'ElSlider',\n  'ElCascade',\n  'ElCheckbox',\n  'ElCheckboxGroup',\n  'ElRadio',\n  'ElRadioGroup',\n  'ElRange',\n  'ElTreeSelect',\n  'ElTextEditor',\n  'ElBatchInput'\n])\n\nexport type FormInstance = InstanceType<typeof Form>\n"],"names":[],"mappings":"AAiCO,MAAM,SAAY,GAAA;AAAA,EACvB,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,GACR;AAAA,EACA,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,MAAA;AAAA,GACR;AAAA,EACA,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,GACR;AAAA,EACA,aAAe,EAAA,MAAA;AAAA,EACf,UAAY,EAAA;AAAA,IACV,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,CAAC,MAAQ,EAAA,KAAA,EAAO,QAAQ,MAAM,CAAA;AAAA,IAGpC,OAAS,EAAA,OAAO,EAAE,IAAA,EAAM,CAAG,EAAA,EAAA,EAAI,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,EAAA,EAAI,CAAE,EAAA,CAAA;AAAA,GACtD;AAAA,EACA,IAAM,EAAA,MAAA;AAAA,EACN,QAAU,EAAA,OAAA;AACZ,EAAA;AAIa,MAAA,cAAA,uBAAqB,GAAI,CAAA;AAAA,EACpC,SAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AACF,CAAC;;;;"}