UNPKG

@extclp/vexip-ui

Version:

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

1 lines 30.7 kB
{"version":3,"file":"color-picker.vue2.mjs","sources":["../../../components/color-picker/color-picker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Input } from '@/components/input'\nimport { Popper } from '@/components/popper'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, ref, toRef, watch } from 'vue'\n\nimport ColorPalette from './color-palette.vue'\nimport ColorHue from './color-hue.vue'\nimport ColorAlpha from './color-alpha.vue'\nimport { placementWhileList, useClickOutside, useHover, usePopper } from '@vexip-ui/hooks'\nimport {\n createIconProp,\n createSizeProp,\n createStateProp,\n emitEvent,\n useIcons,\n useLocale,\n useNameHelper,\n useProps\n} from '@vexip-ui/config'\nimport {\n getLast,\n hsvToHsl,\n hsvToRgb,\n isClient,\n isElement,\n parseColorToRgba,\n rgbToHex,\n rgbToHsv,\n rgbaToHex,\n toAttrValue,\n toFixed\n} from '@vexip-ui/utils'\nimport { colorPickerProps } from './props'\nimport { defaultShortcuts, getDefaultHsv } from './symbol'\n\nimport type { PopperExposed } from '@/components/popper'\nimport type { Color, HSLAColor, HSVAColor, HSVColor, RGBAColor } from '@vexip-ui/utils'\nimport type { ColorFormat, ColorPrickerSlots } from './symbol'\n\ndefineOptions({ name: 'ColorPicker' })\n\nconst {\n idFor,\n labelId,\n state,\n disabled,\n loading,\n size,\n validateField,\n clearField,\n getFieldValue,\n setFieldValue\n} = useFieldStore<Color | null>(() => reference.value?.focus())\n\nconst nh = useNameHelper('color-picker')\n\nconst _props = defineProps(colorPickerProps)\nconst props = useProps('colorPicker', _props, {\n size: createSizeProp(size),\n state: createStateProp(state),\n locale: null,\n value: {\n default: () => getFieldValue()!,\n static: true\n },\n visible: false,\n format: {\n default: 'rgb',\n validator: value => ['rgb', 'hsl', 'hsv', 'hex'].includes(value)\n },\n alpha: false,\n disabled: () => disabled.value,\n transitionName: () => nh.ns('drop'),\n noInput: false,\n shortcut: false,\n placement: {\n default: 'bottom',\n validator: value => placementWhileList.includes(value)\n },\n transfer: false,\n outsideClose: true,\n clearable: false,\n cancelText: null,\n confirmText: null,\n prefix: createIconProp(),\n prefixColor: '',\n suffix: createIconProp(),\n suffixColor: '',\n noSuffix: false,\n staticSuffix: false,\n loading: () => loading.value,\n loadingIcon: createIconProp(),\n loadingLock: false,\n loadingEffect: null,\n popperAlive: null,\n showLabel: false,\n labelFormat: null,\n slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value', 'update:visible'])\n\nconst slots = defineSlots<ColorPrickerSlots>()\n\nconst icons = useIcons()\nconst locale = useLocale('colorPicker', toRef(props, 'locale'))\n\nconst isEmpty = ref(true)\nconst currentVisible = ref(props.visible)\nconst currentValue = ref<HSVColor>(null!)\nconst currentAlpha = ref(1)\nconst editing = ref(false)\nconst placement = toRef(props, 'placement')\nconst transfer = toRef(props, 'transfer')\nconst shortcutHitting = ref(0)\nconst shortcutsFocused = ref(false)\n\nparseValue(props.value)\n\nconst palette = ref(null)\nconst hue = ref(null)\nconst alphaEl = ref(null)\nconst shortcutEl = ref(null)\nconst input = ref(null)\nconst cancel = ref(null)\nconst confirm = ref(null)\n\nconst wrapper = useClickOutside(handleClickOutside)\nconst popper = ref<PopperExposed>()\nconst { reference, transferTo, updatePopper } = usePopper({\n placement,\n transfer,\n wrapper,\n popper: computed(() => popper.value?.wrapper),\n isDrop: true\n})\nconst { isHover } = useHover(reference)\n\nconst unitList = computed(() => {\n return [\n palette.value,\n hue.value,\n alphaEl.value,\n shortcutEl.value,\n input.value,\n cancel.value,\n confirm.value\n ].filter(Boolean) as any[]\n})\n\nconst lastValue = ref<HSVAColor>({\n ...currentValue.value,\n a: currentAlpha.value,\n format: 'hsva'\n})\n\nconst className = computed(() => {\n return {\n [nh.b()]: true,\n [nh.ns('input-vars')]: true,\n [nh.bs('vars')]: true,\n [nh.bm('inherit')]: props.inherit,\n [nh.bm('empty')]: isEmpty.value && !currentVisible.value,\n [nh.bm('focused')]: currentVisible.value,\n [nh.bm('disabled')]: props.disabled,\n [nh.bm('alpha')]: props.alpha,\n [nh.bm(props.size)]: props.size !== 'default',\n [nh.bm(props.state)]: props.state !== 'default'\n }\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst selectorClass = computed(() => {\n const baseCls = nh.be('selector')\n\n return {\n [baseCls]: true,\n [`${baseCls}--disabled`]: props.disabled,\n [`${baseCls}--readonly`]: readonly.value,\n [`${baseCls}--loading`]: props.loading,\n [`${baseCls}--${props.size}`]: props.size !== 'default',\n [`${baseCls}--focused`]: currentVisible.value,\n [`${baseCls}--${props.state}`]: props.state !== 'default'\n }\n})\nconst rgb = computed(() => {\n const { h, s, v } =\n currentValue.value && currentVisible.value\n ? currentValue.value\n : (lastValue.value ?? { h: 0, s: 0, v: 0 })\n\n return hsvToRgb(h, s, v)\n})\nconst hex = computed(() => {\n const { r, g, b } = rgb.value\n\n if (props.alpha) {\n return rgbaToHex(r, g, b, currentAlpha.value)\n }\n\n return rgbToHex(r, g, b)\n})\nconst shortcutList = computed(() => {\n if (!props.shortcut) return []\n\n if (Array.isArray(props.shortcut)) {\n return props.shortcut\n }\n\n return defaultShortcuts\n})\nconst hasPrefix = computed(() => !!(slots.prefix || props.prefix || props.slots.prefix))\nconst showClear = computed(() => {\n return !props.disabled && !readonly.value && props.clearable && isHover.value && !isEmpty.value\n})\nconst formattedColor = computed(() => getFormattedColor(props.format))\nconst labelColor = computed(() => {\n return (\n props.labelFormat ? getFormattedColor(props.labelFormat) : formattedColor.value\n )?.toString()\n})\n\nwatch(\n () => props.visible,\n value => {\n currentVisible.value = value\n }\n)\nwatch(currentVisible, value => {\n value && updatePopper()\n})\nwatch(\n () => props.value,\n value => {\n parseValue(value)\n lastValue.value = { ...currentValue.value, a: currentAlpha.value, format: 'hsva' }\n }\n)\nwatch(\n () => props.disabled,\n value => {\n if (value) {\n setVisible(false)\n }\n }\n)\n\ndefineExpose({\n idFor,\n isEmpty,\n currentVisible,\n currentValue,\n currentAlpha,\n rgb,\n hex,\n labelColor,\n wrapper,\n reference,\n popper,\n toggleVisible,\n focus,\n blur\n})\n\nfunction parseValue(value: Color | null) {\n if (value) {\n const { r, g, b, a } = parseColorToRgba(value)\n\n isEmpty.value = false\n currentValue.value = rgbToHsv(r, g, b)\n currentAlpha.value = a\n } else {\n isEmpty.value = true\n currentValue.value = getDefaultHsv()\n currentAlpha.value = 1\n }\n}\n\nfunction setVisible(visible: boolean) {\n if (currentVisible.value === visible) return\n\n currentVisible.value = visible\n\n emit('update:visible', visible)\n emitEvent(props.onToggle, visible)\n}\n\nfunction getFormattedColor(format: ColorFormat) {\n let color: Color\n\n if (format === 'hex') {\n const { r, g, b } = rgb.value\n\n if (props.alpha) {\n color = rgbaToHex(r, g, b, currentAlpha.value)\n } else {\n color = rgbToHex(r, g, b)\n }\n } else {\n switch (format) {\n case 'rgb': {\n color = { ...rgb.value } as RGBAColor\n color.r = Math.round(color.r)\n color.g = Math.round(color.g)\n color.b = Math.round(color.b)\n\n break\n }\n case 'hsl': {\n const { h, s, v } = currentValue.value\n\n color = hsvToHsl(h, s, v) as HSLAColor\n color.h = Math.round(color.h)\n color.s = toFixed(color.s, 3)\n color.l = toFixed(color.l, 3)\n\n break\n }\n default: {\n color = { ...currentValue.value } as HSVAColor\n color.h = Math.round(color.h)\n color.s = toFixed(color.s, 3)\n color.v = toFixed(color.v, 3)\n }\n }\n\n color.a = toFixed(currentAlpha.value, 3)\n }\n\n return color\n}\n\nfunction handleClickOutside() {\n if (!editing.value) {\n emitEvent(props.onClickOutside)\n\n if (props.outsideClose && currentVisible.value) {\n setVisible(false)\n emitEvent(props.onOutsideClose)\n }\n }\n}\n\nfunction toggleVisible() {\n if (props.disabled || readonly.value) return\n\n setVisible(!currentVisible.value)\n}\n\nfunction handleClear() {\n if (props.disabled || readonly.value) return\n\n if (props.clearable) {\n setVisible(false)\n emit('update:value', '')\n emitEvent(props.onChange, '')\n\n nextTick(() => {\n parseValue(null)\n clearField()\n emitEvent(props.onClear)\n })\n }\n}\n\nfunction handleConfirm() {\n if (props.disabled || readonly.value) return\n\n lastValue.value = { ...currentValue.value, a: currentAlpha.value, format: 'hsva' }\n isEmpty.value = false\n setVisible(false)\n handleChange()\n}\n\nfunction handleChange() {\n const color = formattedColor.value\n\n emit('update:value', color)\n setFieldValue(color)\n emitEvent(props.onChange, color)\n validateField()\n}\n\nfunction handlePaletteChange({ s, v }: HSVColor) {\n currentValue.value.s = s\n currentValue.value.v = v\n}\n\nfunction handleHueChange(hue: number) {\n currentValue.value.h = hue\n}\n\nfunction handleAlphaChange(alpha: number) {\n currentAlpha.value = alpha\n}\n\nfunction handleInputColor(value: string) {\n const { r, g, b, a } = parseColorToRgba(value)\n\n currentValue.value = rgbToHsv(r, g, b)\n currentAlpha.value = a\n}\n\nfunction handleShortcutClick(color: string) {\n const { r, g, b, a } = parseColorToRgba(color)\n\n currentValue.value = rgbToHsv(r, g, b)\n currentAlpha.value = a\n\n emitEvent(props.onShortcut, formattedColor.value)\n}\n\nfunction toggleEditing(able: boolean) {\n if (!able) {\n setTimeout(() => {\n editing.value = false\n }, 0)\n } else {\n editing.value = true\n }\n}\n\nfunction handleTabDown(event: KeyboardEvent) {\n if (isClient && currentVisible.value) {\n const activeEl = document && document.activeElement\n\n if (!activeEl) return\n\n event.preventDefault()\n\n const shift = event.shiftKey\n const elList = Array.from(unitList.value)\n const index = elList.findIndex(unit => {\n const el = isElement(unit) ? unit : unit.$el\n\n return el === activeEl || el.contains(activeEl)\n })\n\n let maybeEl: any\n\n if (!~index) {\n maybeEl = shift ? getLast(elList) : elList[0]\n } else if (shift ? !index : index === elList.length - 1) {\n maybeEl = reference.value\n } else {\n maybeEl = elList[index + (shift ? -1 : 1)]\n }\n\n if (maybeEl) {\n if (typeof maybeEl.focus === 'function') {\n maybeEl.focus()\n } else {\n maybeEl.$el?.focus()\n }\n }\n }\n}\n\nfunction handleShortcutsFocus() {\n shortcutHitting.value = 0\n shortcutsFocused.value = true\n}\n\nfunction handleShortcutsKeydown(event: KeyboardEvent) {\n const key = event.code || event.key\n const shortcutCount = shortcutList.value.length\n\n switch (key) {\n case 'ArrowUp':\n case 'ArrowLeft': {\n shortcutHitting.value--\n break\n }\n case 'ArrowDown':\n case 'ArrowRight': {\n shortcutHitting.value++\n break\n }\n case 'Enter':\n case 'Space':\n case ' ': {\n const color = shortcutList.value[shortcutHitting.value]\n\n color && handleShortcutClick(color)\n break\n }\n }\n\n shortcutHitting.value = (shortcutHitting.value + shortcutCount) % shortcutCount\n}\n\nfunction handleSpaceDown(event: KeyboardEvent) {\n if (props.disabled) {\n setVisible(false)\n } else {\n event.preventDefault()\n\n if (currentVisible.value) {\n handleConfirm()\n reference.value?.focus()\n } else {\n setVisible(true)\n }\n }\n}\n\nfunction handleEscDown() {\n setVisible(false)\n reference.value?.focus()\n}\n\nfunction focus(options?: FocusOptions) {\n reference.value?.focus(options)\n}\n\nfunction blur() {\n reference.value?.blur()\n}\n</script>\n\n<template>\n <div\n :id=\"idFor\"\n ref=\"wrapper\"\n :class=\"className\"\n role=\"group\"\n :aria-disabled=\"toAttrValue(props.disabled)\"\n :aria-expanded=\"toAttrValue(currentVisible)\"\n aria-haspopup=\"listbox\"\n :aria-labelledby=\"labelId\"\n @click=\"toggleVisible\"\n @keydown.tab.stop=\"handleTabDown\"\n @keydown.space=\"handleSpaceDown\"\n @keydown.escape=\"handleEscDown\"\n >\n <div ref=\"reference\" :class=\"selectorClass\" tabindex=\"0\">\n <slot\n name=\"control\"\n :color=\"rgb\"\n :alpha=\"currentAlpha\"\n :empty=\"isEmpty\"\n >\n <Renderer\n :renderer=\"props.slots.control\"\n :data=\"{ color: rgb, alpha: currentAlpha, empty: isEmpty }\"\n >\n <div\n v-if=\"hasPrefix\"\n :class=\"[nh.be('icon'), nh.be('prefix')]\"\n :style=\"{ color: props.prefixColor }\"\n >\n <slot name=\"prefix\">\n <Renderer :renderer=\"props.slots.prefix\">\n <Icon :icon=\"props.prefix\"></Icon>\n </Renderer>\n </slot>\n </div>\n <div :class=\"nh.be('control')\">\n <div :class=\"[nh.be('marker'), showLabel && nh.bem('marker', 'with-label')]\">\n <Icon v-if=\"!currentVisible && isEmpty\" v-bind=\"icons.close\"></Icon>\n <div\n v-else\n :style=\"{\n width: '100%',\n height: '100%',\n backgroundColor: `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${\n currentVisible ? currentAlpha : lastValue.a\n })`\n }\"\n ></div>\n </div>\n <div v-if=\"showLabel\" :class=\"nh.be('label')\">\n <slot\n name=\"label\"\n :color=\"rgb\"\n :alpha=\"currentAlpha\"\n :empty=\"isEmpty\"\n :label=\"labelColor\"\n >\n <Renderer\n :renderer=\"props.slots.label\"\n :data=\"{ color: rgb, alpha: currentAlpha, empty: isEmpty, label: labelColor }\"\n >\n {{ labelColor }}\n </Renderer>\n </slot>\n </div>\n </div>\n <div\n v-if=\"!props.noSuffix\"\n :class=\"[nh.be('icon'), nh.be('suffix')]\"\n :style=\"{\n color: props.suffixColor,\n opacity: showClear || props.loading ? '0%' : ''\n }\"\n >\n <slot name=\"suffix\">\n <Renderer :renderer=\"props.slots.suffix\">\n <Icon\n v-if=\"props.suffix\"\n :icon=\"props.suffix\"\n :class=\"{\n [nh.be('arrow')]: !props.staticSuffix\n }\"\n ></Icon>\n <Icon v-else v-bind=\"icons.angleDown\" :class=\"nh.be('arrow')\"></Icon>\n </Renderer>\n </slot>\n </div>\n <div\n v-else-if=\"props.clearable || props.loading\"\n :class=\"[nh.be('icon'), nh.bem('icon', 'placeholder'), nh.be('suffix')]\"\n ></div>\n <Transition :name=\"nh.ns('fade')\" appear>\n <button\n v-if=\"showClear\"\n :class=\"[nh.be('icon'), nh.be('clear')]\"\n type=\"button\"\n tabindex=\"-1\"\n :aria-label=\"locale.ariaLabel.clear\"\n @click.stop=\"handleClear\"\n >\n <Icon v-bind=\"icons.clear\"></Icon>\n </button>\n <div v-else-if=\"props.loading\" :class=\"[nh.be('icon'), nh.be('loading')]\">\n <Icon\n v-bind=\"icons.loading\"\n :effect=\"props.loadingEffect || icons.loading.effect\"\n :icon=\"props.loadingIcon || icons.loading.icon\"\n ></Icon>\n </div>\n </Transition>\n </Renderer>\n </slot>\n </div>\n <Popper\n ref=\"popper\"\n :class=\"[nh.be('popper'), nh.bs('vars')]\"\n :visible=\"currentVisible\"\n :to=\"transferTo\"\n :transition=\"props.transitionName\"\n :alive=\"props.popperAlive ?? !transferTo\"\n @click.stop\n @keydown.tab.stop=\"handleTabDown\"\n @keydown.space=\"handleSpaceDown\"\n @keydown.escape=\"handleEscDown\"\n >\n <div :class=\"nh.be('panel')\">\n <div :class=\"nh.be('section')\">\n <ColorPalette\n ref=\"palette\"\n :hue=\"currentValue.h\"\n :saturation=\"currentValue.s\"\n :value=\"currentValue.v\"\n @edit-start=\"toggleEditing(true)\"\n @edit-end=\"toggleEditing(false)\"\n @change=\"handlePaletteChange\"\n ></ColorPalette>\n <ColorHue\n ref=\"hue\"\n :hue=\"currentValue.h\"\n @edit-start=\"toggleEditing(true)\"\n @edit-end=\"toggleEditing(false)\"\n @change=\"handleHueChange\"\n ></ColorHue>\n <ColorAlpha\n v-if=\"props.alpha\"\n ref=\"alphaEl\"\n :rgb=\"rgb\"\n :alpha=\"currentAlpha\"\n @edit-start=\"toggleEditing(true)\"\n @edit-end=\"toggleEditing(false)\"\n @change=\"handleAlphaChange\"\n ></ColorAlpha>\n <div\n v-if=\"props.shortcut\"\n ref=\"shortcutEl\"\n :class=\"nh.be('shortcuts')\"\n tabindex=\"-1\"\n @focus=\"handleShortcutsFocus\"\n @blur=\"shortcutsFocused = false\"\n @keydown=\"handleShortcutsKeydown\"\n >\n <div\n v-for=\"(item, index) in shortcutList\"\n :key=\"index\"\n :class=\"{\n [nh.be('shortcut-item')]: true,\n [nh.bem('shortcut-item', 'hitting')]: shortcutsFocused && shortcutHitting === index\n }\"\n :style=\"{ backgroundColor: item }\"\n @click=\"handleShortcutClick(item)\"\n ></div>\n </div>\n </div>\n <div :class=\"nh.be('action')\">\n <Input\n v-if=\"!props.noInput\"\n ref=\"input\"\n inherit\n :class=\"nh.be('input')\"\n size=\"small\"\n :value=\"hex.toUpperCase()\"\n :respond=\"false\"\n @change=\"handleInputColor\"\n ></Input>\n <Button\n v-if=\"props.clearable\"\n ref=\"cancel\"\n inherit\n text\n size=\"small\"\n @click=\"handleClear\"\n >\n {{ props.cancelText || locale.cancel }}\n </Button>\n <Button\n ref=\"confirm\"\n inherit\n type=\"primary\"\n size=\"small\"\n @click=\"handleConfirm\"\n >\n {{ props.confirmText || locale.confirm }}\n </Button>\n </div>\n </div>\n </Popper>\n </div>\n</template>\n"],"names":["idFor","labelId","state","disabled","loading","size","validateField","clearField","getFieldValue","setFieldValue","useFieldStore","_a","reference","nh","useNameHelper","props","useProps","__props","createSizeProp","createStateProp","value","placementWhileList","createIconProp","emit","__emit","slots","_useSlots","icons","useIcons","locale","useLocale","toRef","isEmpty","ref","currentVisible","currentValue","currentAlpha","editing","placement","transfer","shortcutHitting","shortcutsFocused","parseValue","palette","hue","alphaEl","shortcutEl","input","cancel","confirm","wrapper","useClickOutside","handleClickOutside","popper","transferTo","updatePopper","usePopper","computed","isHover","useHover","unitList","lastValue","className","readonly","selectorClass","baseCls","rgb","h","s","v","hsvToRgb","hex","r","g","b","rgbaToHex","rgbToHex","shortcutList","defaultShortcuts","hasPrefix","showClear","formattedColor","getFormattedColor","labelColor","watch","setVisible","__expose","toggleVisible","focus","blur","a","parseColorToRgba","rgbToHsv","getDefaultHsv","visible","emitEvent","format","color","hsvToHsl","toFixed","handleClear","nextTick","handleConfirm","handleChange","handlePaletteChange","handleHueChange","handleAlphaChange","alpha","handleInputColor","handleShortcutClick","toggleEditing","able","handleTabDown","event","isClient","activeEl","shift","elList","index","unit","el","isElement","maybeEl","getLast","handleShortcutsFocus","handleShortcutsKeydown","key","shortcutCount","handleSpaceDown","handleEscDown","options"],"mappings":"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"}