| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', { value: true });
- var vue = require('vue');
- var draggable = require('../utils/draggable.js');
- var position = require('../../../../utils/dom/position.js');
- var index = require('../../../../hooks/use-locale/index.js');
- var aria = require('../../../../constants/aria.js');
- var index$1 = require('../../../../hooks/use-namespace/index.js');
- var style = require('../../../../utils/dom/style.js');
- const useAlphaSlider = (props) => {
- const instance = vue.getCurrentInstance();
- const { t } = index.useLocale();
- const thumb = vue.shallowRef();
- const bar = vue.shallowRef();
- const alpha = vue.computed(() => props.color.get("alpha"));
- const alphaLabel = vue.computed(() => t("el.colorpicker.alphaLabel"));
- function handleClick(event) {
- var _a;
- if (props.disabled)
- return;
- const target = event.target;
- if (target !== thumb.value) {
- handleDrag(event);
- }
- (_a = thumb.value) == null ? void 0 : _a.focus();
- }
- function handleDrag(event) {
- if (!bar.value || !thumb.value || props.disabled)
- return;
- const el = instance.vnode.el;
- const rect = el.getBoundingClientRect();
- const { clientX, clientY } = position.getClientXY(event);
- if (!props.vertical) {
- let left = clientX - rect.left;
- left = Math.max(thumb.value.offsetWidth / 2, left);
- left = Math.min(left, rect.width - thumb.value.offsetWidth / 2);
- props.color.set("alpha", Math.round((left - thumb.value.offsetWidth / 2) / (rect.width - thumb.value.offsetWidth) * 100));
- } else {
- let top = clientY - rect.top;
- top = Math.max(thumb.value.offsetHeight / 2, top);
- top = Math.min(top, rect.height - thumb.value.offsetHeight / 2);
- props.color.set("alpha", Math.round((top - thumb.value.offsetHeight / 2) / (rect.height - thumb.value.offsetHeight) * 100));
- }
- }
- function handleKeydown(event) {
- if (props.disabled)
- return;
- const { code, shiftKey } = event;
- const step = shiftKey ? 10 : 1;
- switch (code) {
- case aria.EVENT_CODE.left:
- case aria.EVENT_CODE.down:
- event.preventDefault();
- event.stopPropagation();
- incrementPosition(-step);
- break;
- case aria.EVENT_CODE.right:
- case aria.EVENT_CODE.up:
- event.preventDefault();
- event.stopPropagation();
- incrementPosition(step);
- break;
- }
- }
- function incrementPosition(step) {
- let next = alpha.value + step;
- next = next < 0 ? 0 : next > 100 ? 100 : next;
- props.color.set("alpha", next);
- }
- return {
- thumb,
- bar,
- alpha,
- alphaLabel,
- handleDrag,
- handleClick,
- handleKeydown
- };
- };
- const useAlphaSliderDOM = (props, {
- bar,
- thumb,
- handleDrag
- }) => {
- const instance = vue.getCurrentInstance();
- const ns = index$1.useNamespace("color-alpha-slider");
- const thumbLeft = vue.ref(0);
- const thumbTop = vue.ref(0);
- const background = vue.ref();
- function getThumbLeft() {
- if (!thumb.value)
- return 0;
- if (props.vertical)
- return 0;
- const el = instance.vnode.el;
- const alpha = props.color.get("alpha");
- if (!el)
- return 0;
- return Math.round(alpha * (el.offsetWidth - thumb.value.offsetWidth / 2) / 100);
- }
- function getThumbTop() {
- if (!thumb.value)
- return 0;
- const el = instance.vnode.el;
- if (!props.vertical)
- return 0;
- const alpha = props.color.get("alpha");
- if (!el)
- return 0;
- return Math.round(alpha * (el.offsetHeight - thumb.value.offsetHeight / 2) / 100);
- }
- function getBackground() {
- if (props.color && props.color.value) {
- const { r, g, b } = props.color.toRgb();
- return `linear-gradient(to right, rgba(${r}, ${g}, ${b}, 0) 0%, rgba(${r}, ${g}, ${b}, 1) 100%)`;
- }
- return "";
- }
- function update() {
- thumbLeft.value = getThumbLeft();
- thumbTop.value = getThumbTop();
- background.value = getBackground();
- }
- vue.onMounted(() => {
- if (!bar.value || !thumb.value)
- return;
- const dragConfig = {
- drag: (event) => {
- handleDrag(event);
- },
- end: (event) => {
- handleDrag(event);
- }
- };
- draggable.draggable(bar.value, dragConfig);
- draggable.draggable(thumb.value, dragConfig);
- update();
- });
- vue.watch(() => props.color.get("alpha"), () => update());
- vue.watch(() => props.color.value, () => update());
- const rootKls = vue.computed(() => [
- ns.b(),
- ns.is("vertical", props.vertical),
- ns.is("disabled", props.disabled)
- ]);
- const barKls = vue.computed(() => ns.e("bar"));
- const thumbKls = vue.computed(() => ns.e("thumb"));
- const barStyle = vue.computed(() => ({ background: background.value }));
- const thumbStyle = vue.computed(() => ({
- left: style.addUnit(thumbLeft.value),
- top: style.addUnit(thumbTop.value)
- }));
- return { rootKls, barKls, barStyle, thumbKls, thumbStyle, update };
- };
- exports.useAlphaSlider = useAlphaSlider;
- exports.useAlphaSliderDOM = useAlphaSliderDOM;
- //# sourceMappingURL=use-alpha-slider.js.map
|