| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- import { getCurrentInstance, shallowRef, computed, ref, onMounted, watch } from 'vue';
- import { draggable } from '../utils/draggable.mjs';
- import { getClientXY } from '../../../../utils/dom/position.mjs';
- import { useLocale } from '../../../../hooks/use-locale/index.mjs';
- import { EVENT_CODE } from '../../../../constants/aria.mjs';
- import { useNamespace } from '../../../../hooks/use-namespace/index.mjs';
- import { addUnit } from '../../../../utils/dom/style.mjs';
- const useAlphaSlider = (props) => {
- const instance = getCurrentInstance();
- const { t } = useLocale();
- const thumb = shallowRef();
- const bar = shallowRef();
- const alpha = computed(() => props.color.get("alpha"));
- const alphaLabel = 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 } = 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 EVENT_CODE.left:
- case EVENT_CODE.down:
- event.preventDefault();
- event.stopPropagation();
- incrementPosition(-step);
- break;
- case EVENT_CODE.right:
- case 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 = getCurrentInstance();
- const ns = useNamespace("color-alpha-slider");
- const thumbLeft = ref(0);
- const thumbTop = ref(0);
- const background = 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();
- }
- onMounted(() => {
- if (!bar.value || !thumb.value)
- return;
- const dragConfig = {
- drag: (event) => {
- handleDrag(event);
- },
- end: (event) => {
- handleDrag(event);
- }
- };
- draggable(bar.value, dragConfig);
- draggable(thumb.value, dragConfig);
- update();
- });
- watch(() => props.color.get("alpha"), () => update());
- watch(() => props.color.value, () => update());
- const rootKls = computed(() => [
- ns.b(),
- ns.is("vertical", props.vertical),
- ns.is("disabled", props.disabled)
- ]);
- const barKls = computed(() => ns.e("bar"));
- const thumbKls = computed(() => ns.e("thumb"));
- const barStyle = computed(() => ({ background: background.value }));
- const thumbStyle = computed(() => ({
- left: addUnit(thumbLeft.value),
- top: addUnit(thumbTop.value)
- }));
- return { rootKls, barKls, barStyle, thumbKls, thumbStyle, update };
- };
- export { useAlphaSlider, useAlphaSliderDOM };
- //# sourceMappingURL=use-alpha-slider.mjs.map
|