UNPKG

@extclp/vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 7.66 kB
{"version":3,"file":"color-palette.vue2.mjs","sources":["../../../components/color-picker/color-palette.vue"],"sourcesContent":["<template>\n <div\n ref=\"wrapper\"\n :class=\"nh.be('palette')\"\n tabindex=\"-1\"\n role=\"group\"\n :style=\"{\n backgroundColor: `hsl(${hue}, 100%, 50%)`\n }\"\n >\n <div :class=\"nh.be('saturation')\" role=\"none\"></div>\n <div :class=\"nh.be('value')\" role=\"none\"></div>\n <div\n :class=\"nh.be('palette-handler')\"\n :style=\"{\n top: `${currentTop}%`,\n left: `${currentLeft}%`\n }\"\n >\n <div :class=\"nh.be('palette-pointer')\"></div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useMoving } from '@vexip-ui/hooks'\nimport { boundRange, toFixed } from '@vexip-ui/utils'\n\nexport default defineComponent({\n name: 'ColorPalette',\n props: {\n hue: {\n type: Number,\n default: 0,\n validator: (value: number) => {\n return value >= 0 && value <= 360\n }\n },\n value: {\n type: Number,\n default: 1,\n validator: (value: number) => {\n return value >= 0 && value <= 1\n }\n },\n saturation: {\n type: Number,\n default: 0,\n validator: (value: number) => {\n return value >= 0 && value <= 1\n }\n }\n },\n emits: ['edit-start', 'edit-end', 'change'],\n setup(props, { emit }) {\n const currentTop = ref((1 - props.value) * 100)\n const currentLeft = ref(props.saturation * 100)\n\n let prevTop = currentTop.value\n let prevLeft = currentLeft.value\n let widthLimit: number\n let heightLimit: number\n let topStartAt: number\n let leftStartAt: number\n\n const { target: wrapper } = useModifier({\n passive: false,\n onKeyDown: (event, modifier) => {\n if (modifier.up || modifier.down || modifier.left || modifier.right) {\n event.preventDefault()\n\n const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\n const sign = modifier.up || modifier.left ? -1 : 1\n const delta = step * sign\n\n if (modifier.up || modifier.down) {\n currentTop.value += delta\n } else {\n currentLeft.value += delta\n }\n\n verifyPosition()\n prevTop = currentTop.value\n prevLeft = currentLeft.value\n handleChange()\n }\n }\n })\n\n const { moving: editing } = useMoving({\n target: wrapper,\n onStart: (state, event) => {\n if (!wrapper.value || event.button > 0) {\n return false\n }\n\n const rect = wrapper.value.getBoundingClientRect()\n const { top, left, width, height } = rect\n\n widthLimit = width\n heightLimit = height\n\n currentTop.value = ((topStartAt = state.clientY - top) / height) * 100\n currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\n\n verifyPosition()\n emit('edit-start')\n\n let changed = false\n\n if (Math.abs(currentTop.value - prevTop) >= 0.01) {\n prevTop = currentTop.value\n changed = true\n }\n\n if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\n prevLeft = currentLeft.value\n changed = true\n }\n\n changed && handleChange()\n },\n onMove: state => {\n currentTop.value = ((topStartAt + state.deltaY) / heightLimit) * 100\n currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\n\n verifyPosition()\n handleChange()\n },\n onEnd: () => {\n emit('edit-end')\n }\n })\n\n watch(\n () => props.value,\n value => {\n currentTop.value = (1 - value) * 100\n verifyPosition()\n },\n { immediate: true }\n )\n watch(\n () => props.saturation,\n value => {\n currentLeft.value = value * 100\n verifyPosition()\n },\n { immediate: true }\n )\n\n function verifyPosition() {\n currentTop.value = toFixed(boundRange(currentTop.value, 0, 100), 3)\n currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n }\n\n function handleChange() {\n emit('change', {\n h: props.hue,\n s: currentLeft.value / 100,\n v: toFixed(1 - currentTop.value / 100, 3)\n })\n }\n\n return {\n nh: useNameHelper('color-picker'),\n currentTop,\n currentLeft,\n editing,\n\n wrapper\n\n // handleMouseDown\n }\n }\n})\n</script>\n"],"names":["_sfc_main","defineComponent","value","props","emit","currentTop","ref","currentLeft","prevTop","prevLeft","widthLimit","heightLimit","topStartAt","leftStartAt","wrapper","useModifier","event","modifier","step","sign","delta","verifyPosition","handleChange","editing","useMoving","state","rect","top","left","width","height","changed","watch","toFixed","boundRange","useNameHelper"],"mappings":"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"}