UNPKG

@extclp/vexip-ui

Version:

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

1 lines 5.84 kB
{"version":3,"file":"color-alpha.vue2.mjs","sources":["../../../components/color-picker/color-alpha.vue"],"sourcesContent":["<template>\n <div\n ref=\"wrapper\"\n :class=\"nh.be('alpha')\"\n tabindex=\"-1\"\n role=\"group\"\n >\n <div\n :class=\"nh.be('opacity')\"\n :style=\"{\n backgroundImage: `linear-gradient(to right, rgba(${rgbString}, 0) 0%, rgb(${rgbString}) 100%)`\n }\"\n ></div>\n <div :class=\"nh.be('alpha-handler')\" :style=\"{ left: `${currentLeft}%` }\"></div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, 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\nimport type { PropType } from 'vue'\nimport type { RGBColor } from '@vexip-ui/utils'\n\nexport default defineComponent({\n name: 'ColorAlpha',\n props: {\n rgb: {\n type: Object as PropType<RGBColor>,\n default: () => {\n return { r: 0, g: 0, b: 0 }\n },\n validator: (value: RGBColor) => {\n return 'r' in value && 'g' in value && 'b' in value\n }\n },\n alpha: {\n type: Number,\n default: 1,\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 currentLeft = ref(props.alpha * 100)\n\n let prevLeft = currentLeft.value\n let widthLimit: number\n let leftStartAt: number\n\n const { target: wrapper } = useModifier({\n passive: false,\n onKeyDown: (event, modifier) => {\n if (modifier.left || modifier.right) {\n event.preventDefault()\n\n const step = event.ctrlKey ? 10 : event.altKey ? 0.5 : 2\n const delta = step * (modifier.left ? -1 : 1)\n\n currentLeft.value += delta\n\n verifyPosition()\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 { left, width } = rect\n\n widthLimit = width\n currentLeft.value = ((leftStartAt = state.clientX - left) / width) * 100\n\n verifyPosition()\n emit('edit-start')\n\n if (Math.abs(currentLeft.value - prevLeft) >= 0.01) {\n prevLeft = currentLeft.value\n handleChange()\n }\n },\n onMove: state => {\n currentLeft.value = ((leftStartAt + state.deltaX) / widthLimit) * 100\n\n verifyPosition()\n handleChange()\n },\n onEnd: () => {\n emit('edit-end')\n }\n })\n\n const rgbString = computed(() => {\n const { r, g, b } = props.rgb\n\n return `${r}, ${g}, ${b}`\n })\n\n verifyPosition()\n\n watch(\n () => props.alpha,\n value => {\n currentLeft.value = value * 100\n verifyPosition()\n },\n { immediate: true }\n )\n\n function verifyPosition() {\n currentLeft.value = toFixed(boundRange(currentLeft.value, 0, 100), 3)\n }\n\n function handleChange() {\n emit('change', currentLeft.value / 100)\n }\n\n return {\n nh: useNameHelper('color-picker'),\n currentLeft,\n editing,\n\n rgbString,\n\n wrapper\n }\n }\n})\n</script>\n"],"names":["_sfc_main","defineComponent","value","props","emit","currentLeft","ref","prevLeft","widthLimit","leftStartAt","wrapper","useModifier","event","modifier","delta","verifyPosition","handleChange","editing","useMoving","state","rect","left","width","rgbString","computed","r","g","b","watch","toFixed","boundRange","useNameHelper"],"mappings":";;;;AA2BA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS,OACA,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MAE5B,WAAW,CAACC,MACH,OAAOA,KAAS,OAAOA,KAAS,OAAOA;AAAA,IAElD;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAACA,MACHA,KAAS,KAAKA,KAAS;AAAA,IAChC;AAAA,EAEJ;AAAA,EACA,OAAO,CAAC,cAAc,YAAY,QAAQ;AAAA,EAC1C,MAAMC,GAAO,EAAE,MAAAC,KAAQ;AACrB,UAAMC,IAAcC,EAAIH,EAAM,QAAQ,GAAG;AAEzC,QAAII,IAAWF,EAAY,OACvBG,GACAC;AAEJ,UAAM,EAAE,QAAQC,EAAQ,IAAIC,EAAY;AAAA,MACtC,SAAS;AAAA,MACT,WAAW,CAACC,GAAOC,MAAa;AAC1B,YAAAA,EAAS,QAAQA,EAAS,OAAO;AACnC,UAAAD,EAAM,eAAe;AAGrB,gBAAME,KADOF,EAAM,UAAU,KAAKA,EAAM,SAAS,MAAM,MACjCC,EAAS,OAAO,KAAK;AAE3C,UAAAR,EAAY,SAASS,GAENC,EAAA,GACfR,IAAWF,EAAY,OACVW,EAAA;AAAA,QAAA;AAAA,MACf;AAAA,IACF,CACD,GAEK,EAAE,QAAQC,EAAQ,IAAIC,EAAU;AAAA,MACpC,QAAQR;AAAA,MACR,SAAS,CAACS,GAAOP,MAAU;AACzB,YAAI,CAACF,EAAQ,SAASE,EAAM,SAAS;AAC5B,iBAAA;AAGH,cAAAQ,IAAOV,EAAQ,MAAM,sBAAsB,GAC3C,EAAE,MAAAW,GAAM,OAAAC,EAAA,IAAUF;AAEX,QAAAZ,IAAAc,GACbjB,EAAY,SAAUI,IAAcU,EAAM,UAAUE,KAAQC,IAAS,KAEtDP,EAAA,GACfX,EAAK,YAAY,GAEb,KAAK,IAAIC,EAAY,QAAQE,CAAQ,KAAK,SAC5CA,IAAWF,EAAY,OACVW,EAAA;AAAA,MAEjB;AAAA,MACA,QAAQ,CAASG,MAAA;AACf,QAAAd,EAAY,SAAUI,IAAcU,EAAM,UAAUX,IAAc,KAEnDO,EAAA,GACFC,EAAA;AAAA,MACf;AAAA,MACA,OAAO,MAAM;AACX,QAAAZ,EAAK,UAAU;AAAA,MAAA;AAAA,IACjB,CACD,GAEKmB,IAAYC,EAAS,MAAM;AAC/B,YAAM,EAAE,GAAAC,GAAG,GAAAC,GAAG,GAAAC,MAAMxB,EAAM;AAE1B,aAAO,GAAGsB,CAAC,KAAKC,CAAC,KAAKC,CAAC;AAAA,IAAA,CACxB;AAEc,IAAAZ,EAAA,GAEfa;AAAA,MACE,MAAMzB,EAAM;AAAA,MACZ,CAASD,MAAA;AACP,QAAAG,EAAY,QAAQH,IAAQ,KACba,EAAA;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IACpB;AAEA,aAASA,IAAiB;AACZ,MAAAV,EAAA,QAAQwB,EAAQC,EAAWzB,EAAY,OAAO,GAAG,GAAG,GAAG,CAAC;AAAA,IAAA;AAGtE,aAASW,IAAe;AACjB,MAAAZ,EAAA,UAAUC,EAAY,QAAQ,GAAG;AAAA,IAAA;AAGjC,WAAA;AAAA,MACL,IAAI0B,EAAc,cAAc;AAAA,MAChC,aAAA1B;AAAA,MACA,SAAAY;AAAA,MAEA,WAAAM;AAAA,MAEA,SAAAb;AAAA,IACF;AAAA,EAAA;AAEJ,CAAC;"}