UNPKG

vuestic-ui

Version:
1 lines 3.42 kB
{"version":3,"file":"useRating.mjs","sources":["../../../../../../src/components/va-rating/hooks/useRating.ts"],"sourcesContent":["import { ref, getCurrentInstance, computed, ExtractPropTypes } from 'vue'\nimport { clamp } from '../../../utils/clamp'\n\nimport { useHover, useStateful, useStatefulProps, useFormFieldProps } from '../../../composables'\n\nimport { RatingValue } from '../types'\n\nconst getContext = <P extends Record<string, any> = Record<string, any>, E extends string = string>() => {\n const instance = getCurrentInstance()\n if (!instance) { throw new Error('useRating hooks must be used on top of setup function') }\n return {\n props: instance.props,\n emit: instance.emit,\n } as {\n props: P,\n emit: (event: E, ...args: any[]) => void\n }\n}\n\nexport const useRatingProps = {\n ...useStatefulProps,\n modelValue: { type: Number, default: 0 },\n clearable: { type: Boolean, default: false },\n hover: { type: Boolean, default: false },\n}\n\nexport const useRating = (props: ExtractPropTypes<typeof useRatingProps> & ExtractPropTypes<typeof useFormFieldProps>) => {\n const { emit } = getContext()\n const { isHovered, onMouseEnter, onMouseLeave } = useHover()\n const { valueComputed: modelValue } = useStateful(props, emit)\n\n const hoveredValue = ref(0)\n const visibleValue = computed(() => !props.disabled && !props.readonly && props.hover && isHovered.value ? hoveredValue.value : modelValue.value)\n\n const onItemValueUpdate = (itemIndex: number, newValue: number) => {\n const newModelValue = itemIndex + newValue\n if (props.clearable) {\n if (modelValue.value === newModelValue) {\n modelValue.value = 0\n return\n }\n }\n modelValue.value = newModelValue\n }\n\n const onItemHoveredValueUpdate = (itemIndex: number, newValue: number) => {\n if (!props.hover) { return }\n hoveredValue.value = itemIndex + newValue\n }\n\n const getItemValue = (itemIndex: number) => {\n const itemValue = visibleValue.value - itemIndex\n return clamp(itemValue, RatingValue.EMPTY, RatingValue.FULL)\n }\n\n return {\n visibleValue,\n modelValue,\n hoveredValue,\n isHovered,\n onMouseEnter,\n onMouseLeave,\n onItemValueUpdate,\n onItemHoveredValueUpdate,\n getItemValue,\n }\n}\n"],"names":[],"mappings":";;;;;AAOA,MAAM,aAAa,MAAsF;AACvG,QAAM,WAAW;AACjB,MAAI,CAAC,UAAU;AAAQ,UAAA,IAAI,MAAM,uDAAuD;AAAA,EAAE;AACnF,SAAA;AAAA,IACL,OAAO,SAAS;AAAA,IAChB,MAAM,SAAS;AAAA,EAAA;AAKnB;AAEO,MAAM,iBAAiB;AAAA,EAC5B,GAAG;AAAA,EACH,YAAY,EAAE,MAAM,QAAQ,SAAS,EAAE;AAAA,EACvC,WAAW,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,EAC3C,OAAO,EAAE,MAAM,SAAS,SAAS,MAAM;AACzC;AAEa,MAAA,YAAY,CAAC,UAAgG;AAClH,QAAA,EAAE,SAAS;AACjB,QAAM,EAAE,WAAW,cAAc,iBAAiB,SAAS;AAC3D,QAAM,EAAE,eAAe,WAAA,IAAe,YAAY,OAAO,IAAI;AAEvD,QAAA,eAAe,IAAI,CAAC;AAC1B,QAAM,eAAe,SAAS,MAAM,CAAC,MAAM,YAAY,CAAC,MAAM,YAAY,MAAM,SAAS,UAAU,QAAQ,aAAa,QAAQ,WAAW,KAAK;AAE1I,QAAA,oBAAoB,CAAC,WAAmB,aAAqB;AACjE,UAAM,gBAAgB,YAAY;AAClC,QAAI,MAAM,WAAW;AACf,UAAA,WAAW,UAAU,eAAe;AACtC,mBAAW,QAAQ;AACnB;AAAA,MACF;AAAA,IACF;AACA,eAAW,QAAQ;AAAA,EAAA;AAGf,QAAA,2BAA2B,CAAC,WAAmB,aAAqB;AACpE,QAAA,CAAC,MAAM,OAAO;AAAE;AAAA,IAAO;AAC3B,iBAAa,QAAQ,YAAY;AAAA,EAAA;AAG7B,QAAA,eAAe,CAAC,cAAsB;AACpC,UAAA,YAAY,aAAa,QAAQ;AACvC,WAAO,MAAM,WAAW,YAAY,OAAO,YAAY,IAAI;AAAA,EAAA;AAGtD,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}