{"version":3,"file":"utils.mjs","sources":["../../../../../../../packages/components/field/src/utils.ts"],"sourcesContent":["import {\n  getRootScrollTop,\n  isFunction,\n  isObject,\n  isPromise,\n  setRootScrollTop,\n} from '@xzx-design/utils'\nimport type { HTMLAttributes, InputHTMLAttributes } from 'vue'\nimport type { FieldAutosizeConfig, FieldRule, FieldType } from './types'\n\nexport function isEmptyValue(value: unknown) {\n  if (Array.isArray(value)) {\n    return !value.length\n  }\n  if (value === 0) {\n    return false\n  }\n  return !value\n}\n\nexport function runSyncRule(value: unknown, rule: FieldRule) {\n  if (isEmptyValue(value)) {\n    if (rule.required) {\n      return false\n    }\n    if (rule.validateEmpty === false) {\n      return true\n    }\n  }\n  if (rule.pattern && !rule.pattern.test(String(value))) {\n    return false\n  }\n  return true\n}\n\nexport function runRuleValidator(value: unknown, rule: FieldRule) {\n  return new Promise((resolve) => {\n    const returnVal = rule.validator!(value, rule)\n\n    if (isPromise(returnVal)) {\n      returnVal.then(resolve)\n      return\n    }\n\n    resolve(returnVal)\n  })\n}\n\nexport function getRuleMessage(value: unknown, rule: FieldRule) {\n  const { message } = rule\n\n  if (isFunction(message)) {\n    return message(value, rule)\n  }\n  return message || ''\n}\n\nexport function startComposing({ target }: Event) {\n  target!.composing = true\n}\n\nexport function endComposing({ target }: Event) {\n  if (target!.composing) {\n    target!.composing = false\n    target!.dispatchEvent(new Event('input'))\n  }\n}\n\nexport function resizeTextarea(\n  input: HTMLInputElement,\n  autosize: true | FieldAutosizeConfig\n) {\n  const scrollTop = getRootScrollTop()\n  input.style.height = 'auto'\n\n  let height = input.scrollHeight\n  if (isObject(autosize)) {\n    const { maxHeight, minHeight } = autosize\n    if (maxHeight !== undefined) {\n      height = Math.min(height, maxHeight)\n    }\n    if (minHeight !== undefined) {\n      height = Math.max(height, minHeight)\n    }\n  }\n\n  if (height) {\n    input.style.height = `${height}px`\n    // https://github.com/vant-ui/vant/issues/9178\n    setRootScrollTop(scrollTop)\n  }\n}\n\nexport function mapInputType(\n  type: FieldType,\n  inputmode?: HTMLAttributes['inputmode']\n): {\n  type: InputHTMLAttributes['type']\n  inputmode?: HTMLAttributes['inputmode']\n} {\n  // type=\"number\" is weird in iOS, and can't prevent dot in Android\n  // so use inputmode to set keyboard in modern browsers\n  if (type === 'number') {\n    type = 'text'\n    inputmode ??= 'decimal'\n  }\n\n  if (type === 'digit') {\n    type = 'tel'\n    inputmode ??= 'numeric'\n  }\n\n  return { type, inputmode }\n}\n\n// get correct length of emoji\n// https://github.com/vant-ui/vant/issues/10032\nexport function getStringLength(str: string) {\n  return [...str].length\n}\n\n// cut string with emoji\nexport function cutString(str: string, maxlength: number) {\n  return [...str].slice(0, maxlength).join('')\n}\n"],"names":[],"mappings":"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"}