slider2.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var core = require('@vueuse/core');
  5. var index$2 = require('../../input-number/index.js');
  6. var constants = require('./constants.js');
  7. var slider = require('./slider.js');
  8. var button = require('./button2.js');
  9. var marker = require('./marker.js');
  10. var pluginVue_exportHelper = require('../../../_virtual/plugin-vue_export-helper.js');
  11. var useSlide = require('./composables/use-slide.js');
  12. var useStops = require('./composables/use-stops.js');
  13. var useMarks = require('./composables/use-marks.js');
  14. var useWatch = require('./composables/use-watch.js');
  15. var useLifecycle = require('./composables/use-lifecycle.js');
  16. var index = require('../../../hooks/use-namespace/index.js');
  17. var index$1 = require('../../../hooks/use-locale/index.js');
  18. var useFormItem = require('../../form/src/hooks/use-form-item.js');
  19. var useFormCommonProps = require('../../form/src/hooks/use-form-common-props.js');
  20. const __default__ = vue.defineComponent({
  21. name: "ElSlider"
  22. });
  23. const _sfc_main = /* @__PURE__ */ vue.defineComponent({
  24. ...__default__,
  25. props: slider.sliderProps,
  26. emits: slider.sliderEmits,
  27. setup(__props, { expose, emit }) {
  28. const props = __props;
  29. const ns = index.useNamespace("slider");
  30. const { t } = index$1.useLocale();
  31. const initData = vue.reactive({
  32. firstValue: 0,
  33. secondValue: 0,
  34. oldValue: 0,
  35. dragging: false,
  36. sliderSize: 1
  37. });
  38. const {
  39. elFormItem,
  40. slider,
  41. firstButton,
  42. secondButton,
  43. sliderDisabled,
  44. minValue,
  45. maxValue,
  46. runwayStyle,
  47. barStyle,
  48. resetSize,
  49. emitChange,
  50. onSliderWrapperPrevent,
  51. onSliderClick,
  52. onSliderDown,
  53. onSliderMarkerDown,
  54. setFirstValue,
  55. setSecondValue
  56. } = useSlide.useSlide(props, initData, emit);
  57. const { stops, getStopStyle } = useStops.useStops(props, initData, minValue, maxValue);
  58. const { inputId, isLabeledByFormItem } = useFormItem.useFormItemInputId(props, {
  59. formItemContext: elFormItem
  60. });
  61. const sliderWrapperSize = useFormCommonProps.useFormSize();
  62. const sliderInputSize = vue.computed(() => props.inputSize || sliderWrapperSize.value);
  63. const groupLabel = vue.computed(() => {
  64. return props.ariaLabel || t("el.slider.defaultLabel", {
  65. min: props.min,
  66. max: props.max
  67. });
  68. });
  69. const firstButtonLabel = vue.computed(() => {
  70. if (props.range) {
  71. return props.rangeStartLabel || t("el.slider.defaultRangeStartLabel");
  72. } else {
  73. return groupLabel.value;
  74. }
  75. });
  76. const firstValueText = vue.computed(() => {
  77. return props.formatValueText ? props.formatValueText(firstValue.value) : `${firstValue.value}`;
  78. });
  79. const secondButtonLabel = vue.computed(() => {
  80. return props.rangeEndLabel || t("el.slider.defaultRangeEndLabel");
  81. });
  82. const secondValueText = vue.computed(() => {
  83. return props.formatValueText ? props.formatValueText(secondValue.value) : `${secondValue.value}`;
  84. });
  85. const sliderKls = vue.computed(() => [
  86. ns.b(),
  87. ns.m(sliderWrapperSize.value),
  88. ns.is("vertical", props.vertical),
  89. { [ns.m("with-input")]: props.showInput }
  90. ]);
  91. const markList = useMarks.useMarks(props);
  92. useWatch.useWatch(props, initData, minValue, maxValue, emit, elFormItem);
  93. const precision = vue.computed(() => {
  94. const precisions = [props.min, props.max, props.step].map((item) => {
  95. const decimal = `${item}`.split(".")[1];
  96. return decimal ? decimal.length : 0;
  97. });
  98. return Math.max.apply(null, precisions);
  99. });
  100. const { sliderWrapper } = useLifecycle.useLifecycle(props, initData, resetSize);
  101. const { firstValue, secondValue, sliderSize } = vue.toRefs(initData);
  102. const updateDragging = (val) => {
  103. initData.dragging = val;
  104. };
  105. core.useEventListener(sliderWrapper, "touchstart", onSliderWrapperPrevent, {
  106. passive: false
  107. });
  108. core.useEventListener(sliderWrapper, "touchmove", onSliderWrapperPrevent, {
  109. passive: false
  110. });
  111. vue.provide(constants.sliderContextKey, {
  112. ...vue.toRefs(props),
  113. sliderSize,
  114. disabled: sliderDisabled,
  115. precision,
  116. emitChange,
  117. resetSize,
  118. updateDragging
  119. });
  120. expose({
  121. onSliderClick
  122. });
  123. return (_ctx, _cache) => {
  124. var _a, _b;
  125. return vue.openBlock(), vue.createElementBlock("div", {
  126. id: _ctx.range ? vue.unref(inputId) : void 0,
  127. ref_key: "sliderWrapper",
  128. ref: sliderWrapper,
  129. class: vue.normalizeClass(vue.unref(sliderKls)),
  130. role: _ctx.range ? "group" : void 0,
  131. "aria-label": _ctx.range && !vue.unref(isLabeledByFormItem) ? vue.unref(groupLabel) : void 0,
  132. "aria-labelledby": _ctx.range && vue.unref(isLabeledByFormItem) ? (_a = vue.unref(elFormItem)) == null ? void 0 : _a.labelId : void 0
  133. }, [
  134. vue.createElementVNode("div", {
  135. ref_key: "slider",
  136. ref: slider,
  137. class: vue.normalizeClass([
  138. vue.unref(ns).e("runway"),
  139. { "show-input": _ctx.showInput && !_ctx.range },
  140. vue.unref(ns).is("disabled", vue.unref(sliderDisabled))
  141. ]),
  142. style: vue.normalizeStyle(vue.unref(runwayStyle)),
  143. onMousedown: vue.unref(onSliderDown),
  144. onTouchstartPassive: vue.unref(onSliderDown)
  145. }, [
  146. vue.createElementVNode("div", {
  147. class: vue.normalizeClass(vue.unref(ns).e("bar")),
  148. style: vue.normalizeStyle(vue.unref(barStyle))
  149. }, null, 6),
  150. vue.createVNode(button["default"], {
  151. id: !_ctx.range ? vue.unref(inputId) : void 0,
  152. ref_key: "firstButton",
  153. ref: firstButton,
  154. "model-value": vue.unref(firstValue),
  155. vertical: _ctx.vertical,
  156. "tooltip-class": _ctx.tooltipClass,
  157. placement: _ctx.placement,
  158. role: "slider",
  159. "aria-label": _ctx.range || !vue.unref(isLabeledByFormItem) ? vue.unref(firstButtonLabel) : void 0,
  160. "aria-labelledby": !_ctx.range && vue.unref(isLabeledByFormItem) ? (_b = vue.unref(elFormItem)) == null ? void 0 : _b.labelId : void 0,
  161. "aria-valuemin": _ctx.min,
  162. "aria-valuemax": _ctx.range ? vue.unref(secondValue) : _ctx.max,
  163. "aria-valuenow": vue.unref(firstValue),
  164. "aria-valuetext": vue.unref(firstValueText),
  165. "aria-orientation": _ctx.vertical ? "vertical" : "horizontal",
  166. "aria-disabled": vue.unref(sliderDisabled),
  167. "onUpdate:modelValue": vue.unref(setFirstValue)
  168. }, null, 8, ["id", "model-value", "vertical", "tooltip-class", "placement", "aria-label", "aria-labelledby", "aria-valuemin", "aria-valuemax", "aria-valuenow", "aria-valuetext", "aria-orientation", "aria-disabled", "onUpdate:modelValue"]),
  169. _ctx.range ? (vue.openBlock(), vue.createBlock(button["default"], {
  170. key: 0,
  171. ref_key: "secondButton",
  172. ref: secondButton,
  173. "model-value": vue.unref(secondValue),
  174. vertical: _ctx.vertical,
  175. "tooltip-class": _ctx.tooltipClass,
  176. placement: _ctx.placement,
  177. role: "slider",
  178. "aria-label": vue.unref(secondButtonLabel),
  179. "aria-valuemin": vue.unref(firstValue),
  180. "aria-valuemax": _ctx.max,
  181. "aria-valuenow": vue.unref(secondValue),
  182. "aria-valuetext": vue.unref(secondValueText),
  183. "aria-orientation": _ctx.vertical ? "vertical" : "horizontal",
  184. "aria-disabled": vue.unref(sliderDisabled),
  185. "onUpdate:modelValue": vue.unref(setSecondValue)
  186. }, null, 8, ["model-value", "vertical", "tooltip-class", "placement", "aria-label", "aria-valuemin", "aria-valuemax", "aria-valuenow", "aria-valuetext", "aria-orientation", "aria-disabled", "onUpdate:modelValue"])) : vue.createCommentVNode("v-if", true),
  187. _ctx.showStops ? (vue.openBlock(), vue.createElementBlock("div", { key: 1 }, [
  188. (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(stops), (item, key) => {
  189. return vue.openBlock(), vue.createElementBlock("div", {
  190. key,
  191. class: vue.normalizeClass(vue.unref(ns).e("stop")),
  192. style: vue.normalizeStyle(vue.unref(getStopStyle)(item))
  193. }, null, 6);
  194. }), 128))
  195. ])) : vue.createCommentVNode("v-if", true),
  196. vue.unref(markList).length > 0 ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [
  197. vue.createElementVNode("div", null, [
  198. (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(markList), (item, key) => {
  199. return vue.openBlock(), vue.createElementBlock("div", {
  200. key,
  201. style: vue.normalizeStyle(vue.unref(getStopStyle)(item.position)),
  202. class: vue.normalizeClass([vue.unref(ns).e("stop"), vue.unref(ns).e("marks-stop")])
  203. }, null, 6);
  204. }), 128))
  205. ]),
  206. vue.createElementVNode("div", {
  207. class: vue.normalizeClass(vue.unref(ns).e("marks"))
  208. }, [
  209. (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(markList), (item, key) => {
  210. return vue.openBlock(), vue.createBlock(vue.unref(marker["default"]), {
  211. key,
  212. mark: item.mark,
  213. style: vue.normalizeStyle(vue.unref(getStopStyle)(item.position)),
  214. onMousedown: vue.withModifiers(($event) => vue.unref(onSliderMarkerDown)(item.position), ["stop"])
  215. }, null, 8, ["mark", "style", "onMousedown"]);
  216. }), 128))
  217. ], 2)
  218. ], 64)) : vue.createCommentVNode("v-if", true)
  219. ], 46, ["onMousedown", "onTouchstartPassive"]),
  220. _ctx.showInput && !_ctx.range ? (vue.openBlock(), vue.createBlock(vue.unref(index$2.ElInputNumber), {
  221. key: 0,
  222. ref: "input",
  223. "model-value": vue.unref(firstValue),
  224. class: vue.normalizeClass(vue.unref(ns).e("input")),
  225. step: _ctx.step,
  226. disabled: vue.unref(sliderDisabled),
  227. controls: _ctx.showInputControls,
  228. min: _ctx.min,
  229. max: _ctx.max,
  230. precision: vue.unref(precision),
  231. debounce: _ctx.debounce,
  232. size: vue.unref(sliderInputSize),
  233. "onUpdate:modelValue": vue.unref(setFirstValue),
  234. onChange: vue.unref(emitChange)
  235. }, null, 8, ["model-value", "class", "step", "disabled", "controls", "min", "max", "precision", "debounce", "size", "onUpdate:modelValue", "onChange"])) : vue.createCommentVNode("v-if", true)
  236. ], 10, ["id", "role", "aria-label", "aria-labelledby"]);
  237. };
  238. }
  239. });
  240. var Slider = /* @__PURE__ */ pluginVue_exportHelper["default"](_sfc_main, [["__file", "slider.vue"]]);
  241. exports["default"] = Slider;
  242. //# sourceMappingURL=slider2.js.map