{"version":3,"file":"form.vue2.cjs","sources":["../../../components/form/form.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Row } from '@/components/row'\n\nimport { computed, provide, reactive } from 'vue'\n\nimport { createSizeProp, useNameHelper, useProps } from '@vexip-ui/config'\nimport { formProps } from './props'\nimport { FORM_ACTIONS, FORM_FIELDS, FORM_PROPS, labelAligns, submitMethods } from './symbol'\n\nimport type { FieldOptions } from './symbol'\n\ndefineOptions({ name: 'Form', inheritAttrs: true })\n\nconst _props = defineProps(formProps)\nconst props = useProps('form', _props, {\n  method: {\n    default: 'post',\n    validator: value => submitMethods.includes(value),\n  },\n  action: null,\n  model: {\n    default: () => ({}),\n    static: true,\n  },\n  rules: () => ({}),\n  labelWidth: 'auto',\n  labelAlign: {\n    default: 'right',\n    validator: value => labelAligns.includes(value),\n  },\n  allRequired: false,\n  labelSuffix: '',\n  hideAsterisk: false,\n  validateAll: false,\n  hideLabel: false,\n  disabled: false,\n  loading: false,\n  size: createSizeProp(),\n  inline: false,\n  gap: [8, 0],\n  justify: 'start',\n  align: 'top',\n})\n\nconst nh = useNameHelper('form')\nconst fieldSet: Set<FieldOptions> = reactive(new Set<any>())\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(`label-${props.labelAlign}`),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm('inline')]: props.inline,\n    },\n  ]\n})\nconst labelWidth = computed(() => {\n  return Math.max(...Array.from(fieldSet).map(field => field.labelWidth.value))\n})\n\nprovide(FORM_PROPS, props)\nprovide(FORM_FIELDS, fieldSet)\nprovide(FORM_ACTIONS, {\n  getLabelWidth,\n  validate,\n  validateFields,\n  reset,\n  resetFields,\n  clearError,\n  clearFieldsError,\n})\n\ndefineExpose({\n  validate,\n  validateFields,\n  reset,\n  resetFields,\n  clearError,\n  clearFieldsError,\n})\n\nfunction getLabelWidth() {\n  if (typeof props.labelWidth === 'number') {\n    return props.labelWidth\n  }\n\n  return labelWidth.value\n}\n\nfunction getPropMap() {\n  const propMap: Record<string, FieldOptions> = {}\n\n  for (const field of fieldSet) {\n    if (field.prop.value) {\n      propMap[field.prop.value] = field\n    }\n  }\n\n  return propMap\n}\n\nfunction validate() {\n  return validateItems(fieldSet)\n}\n\nfunction validateFields(props: string | string[]) {\n  if (!Array.isArray(props)) {\n    props = [props]\n  }\n\n  const propMap = getPropMap()\n  const fields = new Set<FieldOptions>()\n\n  props.forEach(prop => {\n    if (propMap[prop]) {\n      fields.add(propMap[prop])\n    }\n  })\n\n  return validateItems(fields)\n}\n\nfunction validateItems(items: Set<FieldOptions>) {\n  const validations: Promise<string[] | null>[] = []\n\n  items.forEach(item => {\n    validations.push(item.validate())\n  })\n\n  return new Promise<string[]>(resolve => {\n    Promise.all(validations).then(errors => {\n      resolve(errors.flat().filter(Boolean) as string[])\n    })\n  })\n}\n\nfunction reset() {\n  fieldSet.forEach(field => {\n    field.reset()\n  })\n}\n\nfunction resetFields(props: string | string[]) {\n  if (!Array.isArray(props)) {\n    props = [props]\n  }\n\n  const propMap = getPropMap()\n\n  props.forEach(prop => {\n    if (propMap[prop]) {\n      propMap[prop].reset()\n    }\n  })\n}\n\nfunction clearError() {\n  fieldSet.forEach(field => {\n    field.clearError()\n  })\n}\n\nfunction clearFieldsError(props: string | string[]) {\n  if (!Array.isArray(props)) {\n    props = [props]\n  }\n\n  const propMap = getPropMap()\n\n  props.forEach(prop => {\n    if (propMap[prop]) {\n      propMap[prop].clearError()\n    }\n  })\n}\n</script>\n\n<template>\n  <Row\n    v-bind=\"$attrs\"\n    :class=\"className\"\n    :inherit=\"props.inherit\"\n    tag=\"form\"\n    :method=\"props.action && props.method\"\n    :action=\"props.action\"\n    :gap=\"props.gap\"\n    :justify=\"props.justify\"\n    :align=\"props.align\"\n    :column-flex=\"undefined\"\n  >\n    <slot></slot>\n  </Row>\n</template>\n"],"names":["_props","__props","props","useProps","value","submitMethods","labelAligns","createSizeProp","nh","useNameHelper","fieldSet","reactive","className","computed","labelWidth","field","provide","FORM_PROPS","FORM_FIELDS","FORM_ACTIONS","getLabelWidth","validate","validateFields","reset","resetFields","clearError","clearFieldsError","__expose","getPropMap","propMap","validateItems","fields","prop","items","validations","item","resolve","errors","_createBlock","_unref","Row","_mergeProps","_ctx","_renderSlot"],"mappings":"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"}