{"version":3,"file":"rate2.mjs","sources":["../../../../../../packages/components/rate/src/rate.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"[rateClasses, ns.is('disabled', rateDisabled)]\"\n    role=\"slider\"\n    :aria-valuenow=\"currentValue\"\n    :aria-valuetext=\"text\"\n    aria-valuemin=\"0\"\n    :aria-valuemax=\"max\"\n    tabindex=\"0\"\n    :style=\"rateStyles\"\n    @keydown=\"handleKey\"\n  >\n    <span\n      v-for=\"(item, key) in max\"\n      :key=\"key\"\n      :class=\"ns.e('item')\"\n      @mousemove=\"setCurrentValue(item, $event)\"\n      @mouseleave=\"resetCurrentValue\"\n      @click=\"selectValue(item)\"\n    >\n      <el-icon\n        :class=\"[\n          ns.e('icon'),\n          { hover: hoverIndex === item },\n          ns.is('active', item <= currentValue),\n        ]\"\n      >\n        <component\n          :is=\"iconComponents[item - 1]\"\n          v-if=\"!showDecimalIcon(item)\"\n        />\n        <el-icon\n          v-if=\"showDecimalIcon(item)\"\n          :style=\"decimalStyle\"\n          :class=\"[ns.e('icon'), ns.e('decimal')]\"\n        >\n          <component :is=\"decimalIconComponent\" />\n        </el-icon>\n      </el-icon>\n    </span>\n    <span v-if=\"showText || showScore\" :class=\"ns.e('text')\">\n      {{ text }}\n    </span>\n  </div>\n</template>\n<script lang=\"ts\" setup>\nimport { type CSSProperties, computed, inject, ref, watch } from 'vue'\nimport { EVENT_CODE, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { hasClass, isArray, isObject } from '@element-plus/utils'\nimport { formContextKey } from '@element-plus/tokens'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { useNamespace, useSize } from '@element-plus/hooks'\nimport { rateEmits, rateProps } from './rate'\n\nfunction getValueFromMap<T>(\n  value: number,\n  map: Record<string, T | { excluded?: boolean; value: T }>\n) {\n  const isExcludedObject = (\n    val: unknown\n  ): val is { excluded?: boolean } & Record<any, unknown> => isObject(val)\n\n  const matchedKeys = Object.keys(map)\n    .map((key) => +key)\n    .filter((key) => {\n      const val = map[key]\n      const excluded = isExcludedObject(val) ? val.excluded : false\n      return excluded ? value < key : value <= key\n    })\n    .sort((a, b) => a - b)\n  const matchedValue = map[matchedKeys[0]]\n  return (isExcludedObject(matchedValue) && matchedValue.value) || matchedValue\n}\n\ndefineOptions({\n  name: 'ElRate',\n})\n\nconst props = defineProps(rateProps)\nconst emit = defineEmits(rateEmits)\n\nconst formContext = inject(formContextKey, undefined)\nconst rateSize = useSize()\nconst ns = useNamespace('rate')\n\nconst currentValue = ref(props.modelValue)\nconst hoverIndex = ref(-1)\nconst pointerAtLeftHalf = ref(true)\n\nconst rateClasses = computed(() => [ns.b(), ns.m(rateSize.value)])\nconst rateDisabled = computed(() => props.disabled || formContext?.disabled)\nconst rateStyles = computed(() => {\n  return {\n    '--el-rate-void-color': props.voidColor,\n    '--el-rate-disabled-void-color': props.disabledVoidColor,\n    '--el-rate-fill-color': activeColor.value,\n  } as CSSProperties\n})\n\nconst text = computed(() => {\n  let result = ''\n  if (props.showScore) {\n    result = props.scoreTemplate.replace(\n      /\\{\\s*value\\s*\\}/,\n      rateDisabled.value ? `${props.modelValue}` : `${currentValue.value}`\n    )\n  } else if (props.showText) {\n    result = props.texts[Math.ceil(currentValue.value) - 1]\n  }\n  return result\n})\nconst valueDecimal = computed(\n  () => props.modelValue * 100 - Math.floor(props.modelValue) * 100\n)\nconst colorMap = computed(() =>\n  isArray(props.colors)\n    ? {\n        [props.lowThreshold]: props.colors[0],\n        [props.highThreshold]: { value: props.colors[1], excluded: true },\n        [props.max]: props.colors[2],\n      }\n    : props.colors\n)\nconst activeColor = computed(() => {\n  const color = getValueFromMap(currentValue.value, colorMap.value)\n  // {value: '', excluded: true} returned\n  return isObject(color) ? '' : color\n})\nconst decimalStyle = computed(() => {\n  let width = ''\n  if (rateDisabled.value) {\n    width = `${valueDecimal.value}%`\n  } else if (props.allowHalf) {\n    width = '50%'\n  }\n  return {\n    color: activeColor.value,\n    width,\n  }\n})\nconst componentMap = computed(() =>\n  isArray(props.icons)\n    ? {\n        [props.lowThreshold]: props.icons[0],\n        [props.highThreshold]: {\n          value: props.icons[1],\n          excluded: true,\n        },\n        [props.max]: props.icons[2],\n      }\n    : props.icons\n)\nconst decimalIconComponent = computed(() =>\n  getValueFromMap(props.modelValue, componentMap.value)\n)\nconst voidComponent = computed(() =>\n  rateDisabled.value ? props.disabledVoidIcon : props.voidIcon\n)\nconst activeComponent = computed(() =>\n  getValueFromMap(currentValue.value, componentMap.value)\n)\nconst iconComponents = computed(() => {\n  const result = Array.from({ length: props.max })\n  const threshold = currentValue.value\n  result.fill(activeComponent.value, 0, threshold)\n  result.fill(voidComponent.value, threshold, props.max)\n  return result\n})\n\nfunction showDecimalIcon(item: number) {\n  const showWhenDisabled =\n    rateDisabled.value &&\n    valueDecimal.value > 0 &&\n    item - 1 < props.modelValue &&\n    item > props.modelValue\n  const showWhenAllowHalf =\n    props.allowHalf &&\n    pointerAtLeftHalf.value &&\n    item - 0.5 <= currentValue.value &&\n    item > currentValue.value\n  return showWhenDisabled || showWhenAllowHalf\n}\n\nfunction selectValue(value: number) {\n  if (rateDisabled.value) {\n    return\n  }\n  if (props.allowHalf && pointerAtLeftHalf.value) {\n    emit(UPDATE_MODEL_EVENT, currentValue.value)\n    if (props.modelValue !== currentValue.value) {\n      emit('change', currentValue.value)\n    }\n  } else {\n    emit(UPDATE_MODEL_EVENT, value)\n    if (props.modelValue !== value) {\n      emit('change', value)\n    }\n  }\n}\n\nfunction handleKey(e: KeyboardEvent) {\n  if (rateDisabled.value) {\n    return\n  }\n  let _currentValue = currentValue.value\n  const code = e.code\n  if (code === EVENT_CODE.up || code === EVENT_CODE.right) {\n    if (props.allowHalf) {\n      _currentValue += 0.5\n    } else {\n      _currentValue += 1\n    }\n    e.stopPropagation()\n    e.preventDefault()\n  } else if (code === EVENT_CODE.left || code === EVENT_CODE.down) {\n    if (props.allowHalf) {\n      _currentValue -= 0.5\n    } else {\n      _currentValue -= 1\n    }\n    e.stopPropagation()\n    e.preventDefault()\n  }\n  _currentValue = _currentValue < 0 ? 0 : _currentValue\n  _currentValue = _currentValue > props.max ? props.max : _currentValue\n  emit(UPDATE_MODEL_EVENT, _currentValue)\n  emit('change', _currentValue)\n  return _currentValue\n}\n\nfunction setCurrentValue(value: number, event: MouseEvent) {\n  if (rateDisabled.value) {\n    return\n  }\n  if (props.allowHalf) {\n    // TODO: use cache via computed https://github.com/element-plus/element-plus/pull/5456#discussion_r786472092\n    let target = event.target as HTMLElement\n    if (hasClass(target, ns.e('item'))) {\n      target = target.querySelector(`.${ns.e('icon')}`)!\n    }\n    if (target.clientWidth === 0 || hasClass(target, ns.e('decimal'))) {\n      target = target.parentNode as HTMLElement\n    }\n    pointerAtLeftHalf.value = event.offsetX * 2 <= target.clientWidth\n    currentValue.value = pointerAtLeftHalf.value ? value - 0.5 : value\n  } else {\n    currentValue.value = value\n  }\n  hoverIndex.value = value\n}\n\nfunction resetCurrentValue() {\n  if (rateDisabled.value) {\n    return\n  }\n  if (props.allowHalf) {\n    pointerAtLeftHalf.value = props.modelValue !== Math.floor(props.modelValue)\n  }\n  currentValue.value = props.modelValue\n  hoverIndex.value = -1\n}\n\nwatch(\n  () => props.modelValue,\n  (val) => {\n    currentValue.value = val\n    pointerAtLeftHalf.value = props.modelValue !== Math.floor(props.modelValue)\n  }\n)\n\nif (!props.modelValue) {\n  emit(UPDATE_MODEL_EVENT, 0)\n}\n\ndefineExpose({\n  /** @description set current value */\n  setCurrentValue,\n  /** @description reset current value */\n  resetCurrentValue,\n})\n</script>\n"],"names":[],"mappings":"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"}