{"version":3,"file":"color-picker.mjs","sources":["../../../../../../packages/components/color-picker/src/color-picker.vue"],"sourcesContent":["<template>\n  <b-tooltip\n    ref=\"popper\"\n    v-model:visible=\"showPicker\"\n    :fallback-placements=\"['bottom', 'top', 'right', 'left']\"\n    :offset=\"12\"\n    :gpu-acceleration=\"false\"\n    :popper-class=\"[ns.be('picker', 'panel'), ns.b('dropdown'), popperClass]\"\n    :stop-popper-mouse-event=\"false\"\n    effect=\"light\"\n    trigger=\"click\"\n    transition=\"b-zoom-in-top\"\n    persistent\n    data-test-name=\"color-picker-panel\"\n  >\n    <template #content>\n      <div v-click-outside=\"hide\">\n        <div :class=\"ns.be('dropdown', 'main-wrapper')\">\n          <BHueSlider ref=\"hue\" class=\"hue-slider\" :color=\"color\" vertical />\n          <BSvPanel ref=\"svPanel\" :color=\"color\" />\n        </div>\n        <BAlphaSlider v-if=\"showAlpha\" ref=\"alpha\" :color=\"color\" />\n        <BPredefine\n          v-if=\"predefine\"\n          ref=\"predefine\"\n          :color=\"color\"\n          :colors=\"predefine\"\n        />\n        <div :class=\"ns.be('dropdown', 'btns')\">\n          <span :class=\"ns.be('dropdown', 'value')\">\n            <b-input\n              v-model=\"customInput\"\n              :validate-event=\"false\"\n              size=\"small\"\n              @keyup.enter=\"handleConfirm\"\n              @blur=\"handleConfirm\"\n            />\n          </span>\n          <b-button :class=\"ns.be('dropdown', 'btn')\" small @click=\"clear\">\n            {{ t('b.colorpicker.clear') }}\n          </b-button>\n          <b-button\n            small\n            primary\n            :class=\"ns.be('dropdown', 'btn')\"\n            @click=\"confirmValue\"\n          >\n            {{ t('b.colorpicker.confirm') }}\n          </b-button>\n        </div>\n      </div>\n    </template>\n    <template #default>\n      <div\n        :id=\"buttonId\"\n        :class=\"[\n          ns.b('picker'),\n          ns.is('disabled', colorDisabled),\n          ns.bm('picker', colorSize),\n        ]\"\n        role=\"button\"\n        :aria-label=\"buttonAriaLabel\"\n        :aria-description=\"\n          t('b.colorpicker.description', { color: modelValue as string })\n        \"\n        :tabindex=\"tabindex\"\n        data-test-name=\"color-picker\"\n        data-test-variant=\"\"\n        data-test-state=\"\"\n        @keydown.enter=\"handleTrigger\"\n      >\n        <div v-if=\"colorDisabled\" :class=\"ns.be('picker', 'mask')\" />\n        <div\n          :class=\"[ns.be('picker', 'trigger'), ns.is('focus', showPicker)]\"\n          @click=\"handleTrigger\"\n        >\n          <span :class=\"[ns.be('picker', 'color'), ns.is('alpha', showAlpha)]\">\n            <span\n              :class=\"ns.be('picker', 'color-inner')\"\n              :style=\"{\n                backgroundColor: displayedColor,\n              }\"\n            >\n              <b-icon\n                v-show=\"modelValue || showPanelColor\"\n                :class=\"[ns.be('picker', 'icon'), ns.is('icon-arrow-down')]\"\n              >\n                <action-down />\n              </b-icon>\n              <b-icon\n                v-if=\"!modelValue && !showPanelColor\"\n                :class=\"[ns.be('picker', 'empty'), ns.is('icon-close')]\"\n              >\n                <Close />\n              </b-icon>\n            </span>\n          </span>\n        </div>\n      </div>\n    </template>\n  </b-tooltip>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n  computed,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  watch,\n} from 'vue'\nimport { debounce } from 'lodash-unified'\nimport { BButton } from '@bigin/components/button'\nimport { BIcon } from '@bigin/components/icon'\nimport { ClickOutside as vClickOutside } from '@bigin/directives'\nimport {\n  useDisabled,\n  useFormItem,\n  useFormItemInputId,\n  useLocale,\n  useNamespace,\n  useSize,\n} from '@bigin/hooks'\nimport { BTooltip } from '@bigin/components/tooltip'\nimport { BInput } from '@bigin/components/input'\nimport { UPDATE_MODEL_EVENT } from '@bigin/constants'\nimport { ActionDown, Close } from '@bigin/icons-vue'\nimport BAlphaSlider from './components/alpha-slider.vue'\nimport BHueSlider from './components/hue-slider.vue'\nimport BPredefine from './components/predefine.vue'\nimport BSvPanel from './components/sv-panel.vue'\nimport Color from './utils/color'\nimport {\n  colorPickerContextKey,\n  colorPickerEmits,\n  colorPickerProps,\n} from './color-picker'\nimport type { TooltipInstance } from '@bigin/components/tooltip'\n\ndefineOptions({\n  name: 'BColorPicker',\n  components: {\n    BAlphaSlider,\n    BPredefine,\n    BHueSlider,\n    BSvPanel,\n  },\n})\n\nconst props = defineProps(colorPickerProps)\nconst emit = defineEmits(colorPickerEmits)\n\nconst { t } = useLocale()\nconst ns = useNamespace('color')\nconst { formItem } = useFormItem()\nconst colorSize = useSize()\nconst colorDisabled = useDisabled()\n\nconst { inputId: buttonId, isLabeledByFormItem } = useFormItemInputId(props, {\n  formItemContext: formItem,\n})\n\nconst hue = ref<InstanceType<typeof BHueSlider>>()\nconst sv = ref<InstanceType<typeof BSvPanel>>()\nconst alpha = ref<InstanceType<typeof BAlphaSlider>>()\nconst popper = ref<TooltipInstance>()\n\n// active-change is used to prevent modelValue changes from triggering.\nlet shouldActiveChange = true\n\nconst color = reactive(\n  new Color({\n    enableAlpha: props.showAlpha,\n    format: props.colorFormat || '',\n    value: props.modelValue,\n  })\n) as Color\n\nconst showPicker = ref(false)\nconst showPanelColor = ref(false)\nconst customInput = ref('')\n\nconst displayedColor = computed(() => {\n  if (!props.modelValue && !showPanelColor.value) {\n    return 'transparent'\n  }\n  return displayedRgb(color, props.showAlpha)\n})\n\nconst currentColor = computed(() => {\n  return !props.modelValue && !showPanelColor.value ? '' : color.value\n})\n\nconst buttonAriaLabel = computed<string | undefined>(() => {\n  return !isLabeledByFormItem.value\n    ? props.label || t('b.colorpicker.defaultLabel')\n    : undefined\n})\n\nfunction displayedRgb(color: Color, showAlpha: boolean) {\n  if (!(color instanceof Color)) {\n    throw new TypeError('color should be instance of _color Class')\n  }\n\n  const { r, g, b } = color.toRgb()\n  return showAlpha\n    ? `rgba(${r}, ${g}, ${b}, ${color.get('alpha') / 100})`\n    : `rgb(${r}, ${g}, ${b})`\n}\n\nfunction setShowPicker(value: boolean) {\n  showPicker.value = value\n}\n\nconst debounceSetShowPicker = debounce(setShowPicker, 100)\n\nfunction hide() {\n  debounceSetShowPicker(false)\n  resetColor()\n}\n\nfunction resetColor() {\n  nextTick(() => {\n    if (props.modelValue) {\n      color.fromString(props.modelValue)\n    } else {\n      color.value = ''\n      nextTick(() => {\n        showPanelColor.value = false\n      })\n    }\n  })\n}\n\nfunction handleTrigger() {\n  if (colorDisabled.value) return\n  debounceSetShowPicker(!showPicker.value)\n}\n\nfunction handleConfirm() {\n  color.fromString(customInput.value)\n}\n\nfunction confirmValue() {\n  const value = color.value\n  emit(UPDATE_MODEL_EVENT, value)\n  emit('change', value)\n  debounceSetShowPicker(false)\n  // check if modelValue change, if not change, then reset color.\n  nextTick(() => {\n    const newColor = new Color({\n      enableAlpha: props.showAlpha,\n      format: props.colorFormat || '',\n      value: props.modelValue,\n    })\n    if (!color.compare(newColor)) {\n      resetColor()\n    }\n  })\n}\n\nfunction clear() {\n  debounceSetShowPicker(false)\n  emit(UPDATE_MODEL_EVENT, null)\n  emit('change', null)\n\n  resetColor()\n}\n\nonMounted(() => {\n  if (props.modelValue) {\n    customInput.value = currentColor.value\n  }\n})\n\nwatch(\n  () => props.modelValue,\n  (newVal) => {\n    if (!newVal) {\n      showPanelColor.value = false\n    } else if (newVal && newVal !== color.value) {\n      shouldActiveChange = false\n      color.fromString(newVal)\n    }\n  }\n)\n\nwatch(\n  () => currentColor.value,\n  (val) => {\n    customInput.value = val\n    shouldActiveChange && emit('activeChange', val)\n    shouldActiveChange = true\n  }\n)\n\nwatch(\n  () => color.value,\n  () => {\n    if (!props.modelValue && !showPanelColor.value) {\n      showPanelColor.value = true\n    }\n  }\n)\n\nwatch(\n  () => showPicker.value,\n  () => {\n    nextTick(() => {\n      hue.value?.update()\n      sv.value?.update()\n      alpha.value?.update()\n    })\n  }\n)\n\nprovide(colorPickerContextKey, {\n  currentColor,\n})\n\ndefineExpose({\n  color,\n})\n</script>\n"],"names":["color"],"mappings":"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"}