{"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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"}