{"version":3,"file":"rate.mjs","sources":["../../../components/rate/rate.tsx"],"sourcesContent":["import { defineComponent, computed, toRefs, ref } from 'vue';\nimport { StarFilledIcon } from 'tdesign-icons-vue-next';\nimport { useVModel, useConfig, useTNodeJSX } from '@tdesign/shared-hooks';\nimport props from './props';\n\nimport Tooltip from '../tooltip/index';\nimport { isArray } from 'lodash-es';\n\nexport default defineComponent({\n  name: 'TRate',\n  props,\n  setup(props, { slots }) {\n    const renderTNodeJSX = useTNodeJSX();\n    const { globalConfig } = useConfig('rate');\n\n    const activeColor = computed(() => {\n      return isArray(props.color) ? props.color[0] : props.color;\n    });\n    const defaultColor = computed(() => {\n      return isArray(props.color) ? props.color[1] : 'var(--td-bg-color-component)';\n    });\n\n    const { value: inputValue, modelValue } = toRefs(props);\n    const [starValue, setStarValue] = useVModel(inputValue, modelValue, props.defaultValue, props.onChange);\n\n    const hoverValue = ref(undefined);\n    const root = ref<HTMLTableElement>();\n\n    const displayValue = computed(() => Number(hoverValue.value || starValue.value));\n    const displayTexts = computed(() => (props.texts.length === 0 ? globalConfig.value.rateText : props.texts));\n    const displayText = computed(() => displayTexts.value[Math.ceil(displayValue.value - 1)]);\n\n    // 评分图标\n    const RateIcon = (iconProps: any) => {\n      if (slots.icon !== undefined) {\n        return renderTNodeJSX('icon', {\n          params: iconProps,\n        });\n      }\n\n      return <StarFilledIcon {...iconProps} />;\n    };\n\n    const getStarValue = (event: MouseEvent, index: number) => {\n      if (props.allowHalf) {\n        const { left } = root.value.getBoundingClientRect();\n        const firstStar = root.value.firstChild.nextSibling as HTMLElement;\n        const { width } = firstStar.getBoundingClientRect();\n        const { clientX } = event;\n        const starMiddle = width * (index - 0.5) + props.gap * (index - 1);\n\n        if (clientX - left >= starMiddle) return index;\n        if (clientX - left < starMiddle) return index - 0.5;\n      }\n\n      return index;\n    };\n\n    const mouseEnterHandler = (event: MouseEvent, index: number) => {\n      if (props.disabled) return;\n      hoverValue.value = getStarValue(event, index);\n    };\n\n    const mouseLeaveHandler = () => {\n      if (props.disabled) return;\n      hoverValue.value = undefined;\n    };\n\n    const clickHandler = (event: MouseEvent, index: number) => {\n      if (props.disabled) return;\n      const value = getStarValue(event, index);\n      if (props.clearable && value === starValue.value) {\n        hoverValue.value = undefined;\n        setStarValue(0);\n      } else {\n        setStarValue(value);\n      }\n    };\n\n    const getStarCls = (index: number) => {\n      if (props.allowHalf && index + 0.5 === displayValue.value) return `${classPrefix.value}-rate__item--half`;\n      if (index >= displayValue.value) return '';\n      if (index < displayValue.value) return `${classPrefix.value}-rate__item--full`;\n    };\n\n    const { classPrefix } = useConfig('classPrefix');\n\n    return () => {\n      return (\n        <div class={`${classPrefix.value}-rate`} onMouseleave={mouseLeaveHandler}>\n          <ul class={`${classPrefix.value}-rate__list`} style={{ gap: `${props.gap}px` }} ref={root}>\n            {[...Array(Number(props.count))].map((_, index) => (\n              <li\n                key={index}\n                class={[`${classPrefix.value}-rate__item`, getStarCls(index)]}\n                onClick={(event) => clickHandler(event, index + 1)}\n                onMousemove={(event: MouseEvent) => {\n                  return mouseEnterHandler(event, index + 1);\n                }}\n              >\n                {props.showText ? (\n                  <Tooltip key={index} content={displayText.value}>\n                    <div class={`${classPrefix.value}-rate__star-top`}>\n                      <RateIcon size={props.size} color={activeColor.value} />\n                    </div>\n                    <div class={`${classPrefix.value}-rate__star-bottom`}>\n                      <RateIcon size={props.size} color={defaultColor.value} />\n                    </div>\n                  </Tooltip>\n                ) : (\n                  <>\n                    <div class={`${classPrefix.value}-rate__star-top`}>\n                      <RateIcon size={props.size} color={activeColor.value} />\n                    </div>\n                    <div class={`${classPrefix.value}-rate__star-bottom`}>\n                      <RateIcon size={props.size} color={defaultColor.value} />\n                    </div>\n                  </>\n                )}\n              </li>\n            ))}\n          </ul>\n          {props.showText && <div class={`${classPrefix.value}-rate__text`}>{displayText.value}</div>}\n        </div>\n      );\n    };\n  },\n});\n"],"names":["defineComponent","name","props","setup","slots","_ref","renderTNodeJSX","useTNodeJSX","_useConfig","useConfig","globalConfig","activeColor","computed","isArray","color","defaultColor","_toRefs","toRefs","inputValue","value","modelValue","_useVModel","useVModel","defaultValue","onChange","_useVModel2","_slicedToArray","starValue","setStarValue","hoverValue","ref","root","displayValue","Number","displayTexts","texts","length","rateText","displayText","Math","ceil","RateIcon","iconProps","icon","params","_createVNode","StarFilledIcon","getStarValue","event","index","allowHalf","_root$value$getBoundi","getBoundingClientRect","left","firstStar","firstChild","nextSibling","_firstStar$getBoundin","width","clientX","starMiddle","gap","mouseEnterHandler","disabled","mouseLeaveHandler","clickHandler","clearable","getStarCls","concat","classPrefix","_useConfig2","_toConsumableArray","Array","count","map","_","onClick","onMousemove","showText","Tooltip","_default","size","_Fragment"],"mappings":"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"}