{"version":3,"file":"utils.mjs","sources":["../../../../../../../packages/components/select/src/utils.ts"],"sourcesContent":["import {\n  type Numeric,\n  clamp,\n  createNamespace,\n  extend,\n  isDef,\n} from '@xzx-design/utils'\nimport type { Ref } from 'vue'\nimport type { SelectColumn, SelectFieldNames, SelectOption } from './types'\n\nconst [name, bem, t] = createNamespace('select')\n\nexport { name, bem, t }\n\nexport const getFirstEnabledOption = (\n  options: SelectOption[]\n): SelectOption | undefined =>\n  options.find((option) => !option.disabled) || options[0]\n\nexport function getColumnsType(\n  columns: SelectColumn | SelectColumn[],\n  fields: Required<SelectFieldNames>\n) {\n  const firstColumn = columns[0]\n  if (firstColumn) {\n    if (Array.isArray(firstColumn)) {\n      return 'multiple'\n    }\n    if (fields.children in firstColumn) {\n      return 'cascade'\n    }\n  }\n  return 'default'\n}\n\nexport function findIndexOfEnabledOption(\n  options: SelectOption[],\n  index: number\n) {\n  index = clamp(index, 0, options.length)\n\n  for (let i = index; i < options.length; i++) {\n    if (!options[i].disabled) return i\n  }\n  for (let i = index - 1; i >= 0; i--) {\n    if (!options[i].disabled) return i\n  }\n\n  return 0\n}\n\nexport const isOptionExist = (\n  options: SelectOption[],\n  value: Numeric | undefined,\n  fields: Required<SelectFieldNames>\n) =>\n  value !== undefined &&\n  options.some((option) => option[fields.value] === value)\n\nexport function findOptionByValue(\n  options: SelectOption[],\n  value: Numeric,\n  fields: Required<SelectFieldNames>\n): SelectOption | undefined {\n  const index = options.findIndex((option) => option[fields.value] === value)\n  const enabledIndex = findIndexOfEnabledOption(options, index)\n  return options[enabledIndex]\n}\n\nexport function formatCascadeColumns(\n  columns: SelectColumn | SelectColumn[],\n  fields: Required<SelectFieldNames>,\n  selectedValues: Ref<Numeric[]>\n) {\n  const formatted: SelectColumn[] = []\n\n  let cursor: SelectOption | undefined = {\n    [fields.children]: columns,\n  }\n  let columnIndex = 0\n\n  while (cursor && cursor[fields.children]) {\n    const options: SelectOption[] = cursor[fields.children]\n    const value = selectedValues.value[columnIndex]\n\n    cursor = isDef(value)\n      ? findOptionByValue(options, value, fields)\n      : undefined\n\n    if (!cursor && options.length) {\n      const firstValue = getFirstEnabledOption(options)![fields.value]\n      cursor = findOptionByValue(options, firstValue, fields)\n    }\n\n    columnIndex++\n    formatted.push(options)\n  }\n\n  return formatted\n}\n\nexport function getElementTranslateY(element: Element) {\n  const { transform } = window.getComputedStyle(element)\n  const translateY = transform.slice(7, -1).split(', ')[5]\n  return Number(translateY)\n}\n\nexport function assignDefaultFields(\n  fields: SelectFieldNames | undefined\n): Required<SelectFieldNames> {\n  return extend(\n    {\n      text: 'text',\n      value: 'value',\n      children: 'children',\n    },\n    fields\n  )\n}\n"],"names":[],"mappings":"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"}