{"version":3,"file":"form.vue2.mjs","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","useProps","__props","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"],"mappings":"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"}