vuetify
Version:
Vue Material Component Framework
102 lines (101 loc) • 3.32 kB
JavaScript
import { createVNode as _createVNode } from "vue";
// Styles
import "./VColorPickerPreview.css";
// Components
import { VBtn } from "../VBtn/index.js";
import { VSlider } from "../VSlider/index.js"; // Composables
import { makeComponentProps } from "../../composables/component.js"; // Utilities
import { onUnmounted } from 'vue';
import { nullColor } from "./util/index.js";
import { defineComponent, HSVtoCSS, parseColor, propsFactory, RGBtoHSV, SUPPORTS_EYE_DROPPER, useRender } from "../../util/index.js"; // Types
export const makeVColorPickerPreviewProps = propsFactory({
color: {
type: Object
},
disabled: Boolean,
hideAlpha: Boolean,
...makeComponentProps()
}, 'VColorPickerPreview');
export const VColorPickerPreview = defineComponent({
name: 'VColorPickerPreview',
props: makeVColorPickerPreviewProps(),
emits: {
'update:color': color => true
},
setup(props, _ref) {
let {
emit
} = _ref;
const abortController = new AbortController();
onUnmounted(() => abortController.abort());
async function openEyeDropper() {
if (!SUPPORTS_EYE_DROPPER || props.disabled) return;
const eyeDropper = new window.EyeDropper();
try {
const result = await eyeDropper.open({
signal: abortController.signal
});
const colorHexValue = RGBtoHSV(parseColor(result.sRGBHex));
emit('update:color', {
...(props.color ?? nullColor),
...colorHexValue
});
} catch (e) {}
}
useRender(() => _createVNode("div", {
"class": ['v-color-picker-preview', {
'v-color-picker-preview--hide-alpha': props.hideAlpha
}, props.class],
"style": props.style
}, [SUPPORTS_EYE_DROPPER && _createVNode("div", {
"class": "v-color-picker-preview__eye-dropper",
"key": "eyeDropper"
}, [_createVNode(VBtn, {
"density": "comfortable",
"disabled": props.disabled,
"icon": "$eyeDropper",
"variant": "plain",
"onClick": openEyeDropper
}, null)]), _createVNode("div", {
"class": "v-color-picker-preview__dot"
}, [_createVNode("div", {
"style": {
background: HSVtoCSS(props.color ?? nullColor)
}
}, null)]), _createVNode("div", {
"class": "v-color-picker-preview__sliders"
}, [_createVNode(VSlider, {
"class": "v-color-picker-preview__track v-color-picker-preview__hue",
"modelValue": props.color?.h,
"onUpdate:modelValue": h => emit('update:color', {
...(props.color ?? nullColor),
h
}),
"step": 0,
"min": 0,
"max": 360,
"disabled": props.disabled,
"thumbSize": 14,
"trackSize": 8,
"trackFillColor": "white",
"hideDetails": true
}, null), !props.hideAlpha && _createVNode(VSlider, {
"class": "v-color-picker-preview__track v-color-picker-preview__alpha",
"modelValue": props.color?.a ?? 1,
"onUpdate:modelValue": a => emit('update:color', {
...(props.color ?? nullColor),
a
}),
"step": 1 / 256,
"min": 0,
"max": 1,
"disabled": props.disabled,
"thumbSize": 14,
"trackSize": 8,
"trackFillColor": "white",
"hideDetails": true
}, null)])]));
return {};
}
});
//# sourceMappingURL=VColorPickerPreview.js.map