UNPKG

@aplus-frontend/antdv

Version:

Vue basic component library maintained based on ant-design-vue

218 lines 7.7 kB
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; var __rest = this && this.__rest || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; import { computed, ref, defineComponent, createVNode as _createVNode } from 'vue'; import VcSlider from '../vc-slider/src/Slider'; import VcRange from '../vc-slider/src/Range'; import VcHandle from '../vc-slider/src/Handle'; import { stringType, booleanType, someType, objectType, withInstall, functionType } from '../_util/type'; import useConfigInject from '../config-provider/hooks/useConfigInject'; import SliderTooltip from './SliderTooltip'; import classNames from '../_util/classNames'; import { useInjectFormItemContext } from '../form/FormItemContext'; // CSSINJS import useStyle from './style'; import devWarning from '../vc-util/devWarning'; import { useInjectDisabled } from '../config-provider/DisabledContext'; const defaultTipFormatter = value => typeof value === 'number' ? value.toString() : ''; export const sliderProps = () => ({ id: String, prefixCls: String, tooltipPrefixCls: String, range: someType([Boolean, Object]), reverse: booleanType(), min: Number, max: Number, step: someType([Object, Number]), marks: objectType(), dots: booleanType(), value: someType([Array, Number]), defaultValue: someType([Array, Number]), included: booleanType(), disabled: booleanType(), vertical: booleanType(), tipFormatter: someType([Function, Object], () => defaultTipFormatter), tooltipOpen: booleanType(), /** @deprecated `tooltipVisible` is deprecated. Please use `tooltipOpen` instead. */ tooltipVisible: booleanType(), tooltipPlacement: stringType(), getTooltipPopupContainer: functionType(), autofocus: booleanType(), handleStyle: someType([Array, Object]), trackStyle: someType([Array, Object]), onChange: functionType(), onAfterChange: functionType(), onFocus: functionType(), onBlur: functionType(), 'onUpdate:value': functionType() }); const Slider = defineComponent({ compatConfig: { MODE: 3 }, name: 'ASlider', inheritAttrs: false, props: sliderProps(), // emits: ['update:value', 'change', 'afterChange', 'blur'], slots: Object, setup(props, _ref) { let { attrs, slots, emit, expose } = _ref; // Warning for deprecated usage if (process.env.NODE_ENV !== 'production') { [['tooltipVisible', 'tooltipOpen']].forEach(_ref2 => { let [deprecatedName, newName] = _ref2; devWarning(props.tooltipVisible === undefined, 'Slider', `\`${deprecatedName}\` is deprecated, please use \`${newName}\` instead.`); }); } const { prefixCls, rootPrefixCls, direction, getPopupContainer, configProvider } = useConfigInject('slider', props); // style const [wrapSSR, hashId] = useStyle(prefixCls); const formItemContext = useInjectFormItemContext(); const disabled = useInjectDisabled(); const sliderRef = ref(); const visibles = ref({}); const toggleTooltipOpen = (index, visible) => { visibles.value[index] = visible; }; const tooltipPlacement = computed(() => { if (props.tooltipPlacement) { return props.tooltipPlacement; } if (!props.vertical) { return 'top'; } return direction.value === 'rtl' ? 'left' : 'right'; }); const focus = () => { var _a; (_a = sliderRef.value) === null || _a === void 0 ? void 0 : _a.focus(); }; const blur = () => { var _a; (_a = sliderRef.value) === null || _a === void 0 ? void 0 : _a.blur(); }; const handleChange = val => { emit('update:value', val); emit('change', val); formItemContext.onFieldChange(); }; const handleBlur = e => { emit('blur', e); }; expose({ focus, blur }); const handleWithTooltip = _a => { var { tooltipPrefixCls } = _a, _b = _a.info, { value, dragging, index } = _b, restProps = __rest(_b, ["value", "dragging", "index"]); const { tipFormatter, tooltipOpen = props.tooltipVisible, getTooltipPopupContainer } = props; const isTipFormatter = tipFormatter ? visibles.value[index] || dragging : false; const open = tooltipOpen || tooltipOpen === undefined && isTipFormatter; return _createVNode(SliderTooltip, { "prefixCls": tooltipPrefixCls, "title": tipFormatter ? tipFormatter(value) : '', "open": open, "placement": tooltipPlacement.value, "transitionName": `${rootPrefixCls.value}-zoom-down`, "key": index, "overlayClassName": `${prefixCls.value}-tooltip`, "getPopupContainer": getTooltipPopupContainer || (getPopupContainer === null || getPopupContainer === void 0 ? void 0 : getPopupContainer.value) }, { default: () => [_createVNode(VcHandle, _objectSpread(_objectSpread({}, restProps), {}, { "value": value, "onMouseenter": () => toggleTooltipOpen(index, true), "onMouseleave": () => toggleTooltipOpen(index, false) }), null)] }); }; return () => { var _a, _b; const { tooltipPrefixCls: customizeTooltipPrefixCls, range, id = formItemContext.id.value } = props, restProps = __rest(props, ["tooltipPrefixCls", "range", "id"]); const tooltipPrefixCls = configProvider.getPrefixCls('tooltip', customizeTooltipPrefixCls); const cls = classNames(attrs.class, { [`${prefixCls.value}-rtl`]: direction.value === 'rtl' }, hashId.value); // make reverse default on rtl direction if (direction.value === 'rtl' && !restProps.vertical) { restProps.reverse = !restProps.reverse; } // extrack draggableTrack from range={{ ... }} let draggableTrack; if (typeof range === 'object') { draggableTrack = range.draggableTrack; } if (range) { return wrapSSR(_createVNode(VcRange, _objectSpread(_objectSpread(_objectSpread({}, attrs), restProps), {}, { "disabled": (_a = props.disabled) !== null && _a !== void 0 ? _a : disabled.value, "step": restProps.step, "draggableTrack": draggableTrack, "class": cls, "ref": sliderRef, "handle": info => handleWithTooltip({ tooltipPrefixCls, prefixCls: prefixCls.value, info }), "prefixCls": prefixCls.value, "onChange": handleChange, "onBlur": handleBlur }), { mark: slots.mark })); } return wrapSSR(_createVNode(VcSlider, _objectSpread(_objectSpread(_objectSpread({}, attrs), restProps), {}, { "disabled": (_b = props.disabled) !== null && _b !== void 0 ? _b : disabled.value, "id": id, "step": restProps.step, "class": cls, "ref": sliderRef, "handle": info => handleWithTooltip({ tooltipPrefixCls, prefixCls: prefixCls.value, info }), "prefixCls": prefixCls.value, "onChange": handleChange, "onBlur": handleBlur }), { mark: slots.mark })); }; } }); export default withInstall(Slider);