{"version":3,"file":"form-item.vue2.mjs","sources":["../../../components/form/form-item.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Column } from '@/components/column'\nimport { Icon } from '@/components/icon'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, inject, onBeforeUnmount, onMounted, provide, ref, toRef, watch } from 'vue'\n\nimport {\n  makeSentence,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps,\n  useWordSpace\n} from '@vexip-ui/config'\nimport { useDisplay } from '@vexip-ui/hooks'\nimport { createEventEmitter, getGlobalCount, isFunction, isNull, isObject } from '@vexip-ui/utils'\nimport { formItemProps } from './props'\nimport { validate as asyncValidate } from './validator'\nimport { getValueByPath, setValueByPath } from './helper'\nimport { FIELD_OPTIONS, FORM_ACTIONS, FORM_FIELDS, FORM_PROPS } from './symbol'\n\nimport type { ComponentState } from '@vexip-ui/config'\nimport type { Rule } from './validator'\n\ndefineOptions({ name: 'FormItem', inheritAttrs: true })\n\nconst nh = useNameHelper('form')\nconst _props = defineProps(formItemProps)\nconst props = useProps('formItem', _props, {\n  locale: null,\n  label: {\n    default: '',\n    static: true\n  },\n  prop: {\n    default: '',\n    static: true\n  },\n  name: {\n    default: '',\n    static: true\n  },\n  rules: () => [],\n  labelWidth: null,\n  required: false,\n  htmlFor: {\n    default: null,\n    static: true\n  },\n  errorTransition: () => nh.ns('fade'),\n  defaultValue: {\n    default: null,\n    static: true\n  },\n  hideErrorTip: false,\n  validateAll: null,\n  hideAsterisk: null,\n  hideLabel: null,\n  action: false,\n  help: '',\n  pure: false,\n  span: 24,\n  offset: null,\n  push: null,\n  pull: null,\n  order: null,\n  xs: null,\n  sm: null,\n  md: null,\n  lg: null,\n  xl: null,\n  xxl: null,\n  flex: null\n})\n\nconst slots = defineSlots<{\n  default?: () => any,\n  help?: () => any,\n  label?: () => any,\n  error?: (params: { tip: string }) => any\n}>()\n\nconst formProps = inject(FORM_PROPS, {})\nconst formActions = inject(FORM_ACTIONS, null)\nconst formFields = inject(FORM_FIELDS, null)\nconst emitter = createEventEmitter()\n\nconst locale = useLocale('form', toRef(props, 'locale'))\nconst icons = useIcons()\nconst wordSpace = useWordSpace()\n\nconst idIndex = `${getGlobalCount()}`\n\nconst initValue = ref(props.defaultValue)\nconst isError = ref(false)\nconst errorTip = ref('')\nconst validating = ref(false)\nconst disabledValidate = ref(false)\nconst labelWidth = ref(0)\n\nconst placeholder = useDisplay(() => {\n  if (placeholder.value) {\n    labelWidth.value = placeholder.value.offsetWidth\n  }\n})\n\nconst labelId = computed(() => nh.bs(`${idIndex}__label`))\nconst isRequired = computed(() => formProps.allRequired || props.required)\nconst requiredTip = computed(() => {\n  return makeSentence(`${props.label || props.prop} ${locale.value.notNullable}`, wordSpace.value)\n})\nconst allRules = computed(() => {\n  if (!props.prop) return []\n\n  const requiredRule: Rule[] = isRequired.value\n    ? [{ required: isRequired.value, message: requiredTip.value }]\n    : []\n  const selfRules = Array.isArray(props.rules) ? props.rules : [props.rules]\n\n  let formRules: Rule[] = []\n\n  if (formProps.rules) {\n    formRules = (getValueByPath(formProps.rules, props.prop) as Rule[]) ?? []\n  }\n\n  formRules = Array.isArray(formRules) ? formRules : [formRules]\n\n  return requiredRule.concat(formRules, selfRules)\n})\nconst currentValue = computed(getValue)\nconst isValidateAll = computed(() => {\n  return isNull(props.validateAll) ? (formProps.validateAll ?? false) : props.validateAll\n})\nconst useAsterisk = computed(() => {\n  if (props.hideAsterisk === true || formProps.hideAsterisk) {\n    return false\n  }\n\n  for (const rule of allRules.value) {\n    if (rule.required) return true\n  }\n\n  return isRequired.value\n})\nconst hideLabel = computed(() => props.action || props.hideLabel === true || formProps.hideLabel)\nconst hasLabel = computed(() => !(hideLabel.value || !(props.label || slots.label)))\nconst labelAlign = computed(() => formProps.labelAlign)\nconst computedLabelWidth = computed(() => {\n  if (labelAlign.value) {\n    return getLabelWidth(\n      labelAlign.value === 'top'\n        ? 0\n        : hideLabel.value\n          ? 0\n          : props.labelWidth || formProps.labelWidth || 80\n    )\n  }\n\n  return getLabelWidth(hideLabel.value ? 0 : props.labelWidth || 80)\n})\nconst className = computed(() => {\n  return {\n    [nh.be('item')]: true,\n    [nh.bs('vars')]: true,\n    [nh.bem('item', 'inherit')]: formFields || props.inherit,\n    [nh.bem('item', 'required')]: !formProps.hideAsterisk && useAsterisk.value,\n    [nh.bem('item', 'error')]: isError.value,\n    [nh.bem('item', 'action')]: props.action,\n    [nh.bem('item', 'padding')]: formProps.inline && labelAlign.value === 'top' && !hasLabel.value\n  }\n})\nconst controlStyle = computed(() => {\n  return {\n    width: labelAlign.value === 'top' ? undefined : `calc(100% - ${computedLabelWidth.value}px)`,\n    marginLeft:\n      hasLabel.value || labelAlign.value === 'top' ? undefined : `${computedLabelWidth.value}px`\n  }\n})\nconst inputValue = computed(() => {\n  const value = currentValue.value\n\n  if (Array.isArray(value) || isObject(value)) {\n    return JSON.stringify(value)\n  }\n\n  return value\n})\nconst columnFlex = computed(() => {\n  return { justify: props.action ? 'center' : 'start', align: 'middle' } as const\n})\n\nconst instances = new Set<any>()\n\nconst fieldObject = Object.freeze({\n  prop: computed(() => props.prop),\n  idFor: computed(() => props.prop),\n  labelId,\n  state: computed<ComponentState>(() => (isError.value ? 'error' : 'default')),\n  disabled: computed(() => !!formProps.disabled),\n  loading: computed(() => !!formProps.loading),\n  size: computed(() => formProps.size || 'default'),\n  emitter,\n  labelWidth,\n  validate,\n  clearError,\n  reset,\n  getValue,\n  setValue,\n  sync: (instance: any) => {\n    if (instances.size) {\n      console.warn('[vexip-ui:Form]: must only be one control component under FormItem.')\n    }\n\n    instances.add(instance)\n  },\n  unSync: (instance: any) => {\n    instances.delete(instance)\n  }\n})\n\nprovide(FIELD_OPTIONS, fieldObject)\n\nwatch(\n  () => props.defaultValue,\n  value => {\n    initValue.value = value\n  }\n)\n\nonMounted(() => {\n  const value = currentValue.value\n\n  if (isNull(initValue.value)) {\n    initValue.value = Array.isArray(value) ? Array.from(value) : value\n  }\n\n  if (formFields) {\n    formFields.add(fieldObject)\n  }\n})\n\nonBeforeUnmount(() => {\n  if (formFields) {\n    formFields.delete(fieldObject)\n  }\n})\n\ndefineExpose({ isError, inputValue, computedLabelWidth })\n\nfunction getLabelWidth(width: number | 'auto') {\n  return width === 'auto' ? formActions?.getLabelWidth() || 80 : width\n}\n\nlet initialized = false\n\nfunction getValue(defaultValue: unknown = initValue.value) {\n  if (!formProps.model || !props.prop) return defaultValue\n\n  try {\n    const value = getValueByPath(formProps.model, props.prop, true)\n    initialized = true\n\n    return value\n  } catch (e) {\n    if (!initialized) {\n      setValueByPath(formProps.model, props.prop, defaultValue, false)\n      initialized = true\n    }\n\n    return defaultValue\n  }\n}\n\nfunction setValue(value: unknown, strict = false) {\n  if (!formProps.model || !props.prop) return\n\n  try {\n    return setValueByPath(formProps.model, props.prop, value, strict)\n  } catch (e) {}\n}\n\nfunction validate() {\n  return handleValidate()\n}\n\nfunction clearError() {\n  isError.value = false\n  errorTip.value = ''\n}\n\nfunction reset() {\n  clearError()\n\n  if (!formProps.model || !props.prop) return false\n\n  const value = currentValue.value\n\n  let resetValue\n\n  if (Array.isArray(value)) {\n    resetValue = Array.isArray(initValue.value) ? Array.from(initValue.value) : []\n  } else {\n    resetValue = isFunction(initValue.value) ? initValue.value() : initValue.value\n  }\n\n  return setValueByPath(formProps.model, props.prop, resetValue, true)\n}\n\nasync function handleValidate() {\n  if (disabledValidate.value) {\n    disabledValidate.value = false\n\n    return handleValidateEnd(null)\n  }\n\n  if (!props.prop || !formProps.model || validating.value) {\n    return handleValidateEnd(null)\n  }\n\n  validating.value = true\n\n  const value = currentValue.value\n  const useRules = allRules.value\n  const model = formProps.model\n\n  let errors: string[] | null = await asyncValidate(\n    useRules,\n    value,\n    model,\n    isValidateAll.value,\n    locale.value.validateFail\n  )\n\n  errors = errors.length ? errors : null\n\n  return handleValidateEnd(errors)\n}\n\nfunction handleValidateEnd(errors: string[] | null) {\n  validating.value = false\n\n  if (!errors) {\n    clearError()\n  } else {\n    isError.value = true\n    errorTip.value = Array.isArray(errors) ? errors[0] : errors\n  }\n\n  return errors\n}\n\nfunction handleLabelClick() {\n  emitter.emit('focus')\n}\n\nconst isNative = computed(() => !!(formProps.action && formProps.method))\n</script>\n\n<template>\n  <slot v-if=\"props.pure\"></slot>\n  <Column\n    v-else\n    v-bind=\"$attrs\"\n    :class=\"className\"\n    :inherit=\"props.inherit\"\n    role=\"group\"\n    tag=\"div\"\n    :span=\"props.span\"\n    :offset=\"props.offset\"\n    :push=\"props.push\"\n    :pull=\"props.pull\"\n    :order=\"props.order\"\n    :xs=\"props.xs\"\n    :sm=\"props.sm\"\n    :md=\"props.md\"\n    :lg=\"props.lg\"\n    :xl=\"props.xl\"\n    :xxl=\"props.xxl\"\n    :flex=\"props.flex\"\n    :use-flex=\"columnFlex\"\n  >\n    <input\n      v-if=\"isNative\"\n      type=\"hidden\"\n      :name=\"props.name || props.prop\"\n      :value=\"inputValue\"\n      style=\"display: none\"\n    />\n    <span v-if=\"hasLabel && labelAlign !== 'top'\" ref=\"placeholder\" :class=\"nh.be('placeholder')\">\n      <slot name=\"label\">\n        {{ props.label + (formProps.labelSuffix || '') }}\n      </slot>\n    </span>\n    <label\n      v-if=\"hasLabel\"\n      :id=\"labelId\"\n      :class=\"nh.be('label')\"\n      :style=\"{ width: labelAlign !== 'top' ? `${computedLabelWidth}px` : undefined }\"\n      :for=\"props.htmlFor || props.prop\"\n      @click=\"handleLabelClick\"\n    >\n      <Tooltip v-if=\"props.help || slots.help\" transfer>\n        <template #trigger>\n          <Icon v-bind=\"icons.help\" :class=\"nh.be('help')\"></Icon>\n        </template>\n        <slot name=\"help\">\n          <div :class=\"nh.be('help-tip')\">\n            {{ props.help }}\n          </div>\n        </slot>\n      </Tooltip>\n      <slot name=\"label\">\n        {{ props.label + (formProps.labelSuffix || '') }}\n      </slot>\n    </label>\n    <div\n      :class=\"{\n        [nh.be('control')]: true,\n        [nh.bem('control', 'no-label')]: !hasLabel,\n        [nh.bem('control', 'action')]: props.action\n      }\"\n      role=\"alert\"\n      aria-relevant=\"all\"\n      :style=\"controlStyle\"\n    >\n      <slot></slot>\n      <Transition :name=\"props.errorTransition\">\n        <div v-if=\"!props.hideErrorTip && isError\" :class=\"nh.be('error-tip')\">\n          <slot name=\"error\" :tip=\"errorTip\">\n            {{ errorTip }}\n          </slot>\n        </div>\n      </Transition>\n    </div>\n  </Column>\n</template>\n"],"names":["nh","useNameHelper","props","useProps","__props","slots","_useSlots","formProps","inject","FORM_PROPS","formActions","FORM_ACTIONS","formFields","FORM_FIELDS","emitter","createEventEmitter","locale","useLocale","toRef","icons","useIcons","wordSpace","useWordSpace","idIndex","getGlobalCount","initValue","ref","isError","errorTip","validating","disabledValidate","labelWidth","placeholder","useDisplay","labelId","computed","isRequired","requiredTip","makeSentence","allRules","requiredRule","selfRules","formRules","getValueByPath","currentValue","getValue","isValidateAll","isNull","useAsterisk","rule","hideLabel","hasLabel","labelAlign","computedLabelWidth","getLabelWidth","className","controlStyle","inputValue","value","isObject","columnFlex","instances","fieldObject","validate","clearError","reset","setValue","instance","provide","FIELD_OPTIONS","watch","onMounted","onBeforeUnmount","__expose","width","initialized","defaultValue","setValueByPath","strict","handleValidate","resetValue","isFunction","handleValidateEnd","useRules","model","errors","asyncValidate","handleLabelClick","isNative"],"mappings":"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"}