{"version":3,"file":"checkbox.vue2.mjs","sources":["../../../components/checkbox/checkbox.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, inject, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { adjustAlpha, isDefined, isFunction, parseColorToRgba } from '@vexip-ui/utils'\nimport { checkboxProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\ndefineOptions({ name: 'Checkbox' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<boolean>(() => input.value?.focus())\n\nconst _props = defineProps(checkboxProps)\nconst props = useProps('checkbox', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  checked: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  label: null,\n  value: {\n    default: null,\n    static: true\n  },\n  labelClass: null,\n  disabled: () => disabled.value,\n  border: false,\n  control: false,\n  partial: false,\n  tabIndex: 0,\n  loading: () => loading.value,\n  loadingLock: false,\n  name: {\n    default: '',\n    static: true\n  },\n  color: null,\n  stateColor: false\n})\n\nconst emit = defineEmits(['update:checked'])\n\nconst slots = defineSlots<{\n  default?: () => any\n}>()\n\nconst groupState = inject(GROUP_STATE, null)\n\nconst nh = useNameHelper('checkbox')\nconst currentChecked = ref(props.checked ?? false)\nconst currentPartial = ref(props.partial)\n\nconst input = ref<HTMLInputElement>()\n\nconst controlState = reactive({\n  checked: currentChecked,\n  partial: currentPartial\n})\n\nconst computedSize = computed(() => groupState?.size || props.size)\nconst computedState = computed(() => groupState?.state || props.state)\nconst isDisabled = computed(() => groupState?.disabled || props.disabled)\nconst isLoading = computed(() => groupState?.loading || props.loading)\nconst isLoadingLock = computed(() => groupState?.loadingLock || props.loadingLock)\nconst stateColor = computed(() => groupState?.stateColor || props.stateColor)\nconst readonly = computed(() => isLoading.value && isLoadingLock.value)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('checked')]: currentChecked.value,\n      [nh.bm('disabled')]: isDisabled.value,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: isLoading.value,\n      [nh.bm(computedSize.value)]: computedSize.value !== 'default',\n      [nh.bm('border')]: props.border,\n      [nh.bm('partial')]: props.control && currentPartial.value,\n      [nh.bm(computedState.value)]: computedState.value !== 'default'\n    }\n  ]\n})\nconst colorMap = computed(() => {\n  if (!props.color) return groupState?.colorMap\n\n  const baseColor = parseColorToRgba(props.color)\n\n  return {\n    base: baseColor.toString(),\n    opacity6: adjustAlpha(baseColor, 0.4).toString()\n  }\n})\nconst style = computed<Record<string, string>>(() => {\n  if (!colorMap.value) return {}\n\n  const { base, opacity6 } = colorMap.value\n\n  return nh.cvm({\n    'label-color-checked': base,\n    'b-color': stateColor.value ? base : undefined,\n    'b-color-hover': base,\n    'b-color-checked': base,\n    'signal-bg-color-checked': base,\n    's-color-focus': opacity6\n  })\n})\nconst hasLabel = computed(() => {\n  return isDefined(props.label) && props.label !== ''\n})\nconst currentValue = computed(() => {\n  return props.value ?? props.label\n})\n\nwatch(\n  () => props.checked,\n  value => {\n    setCurrentChecked(value)\n  }\n)\nwatch(\n  () => props.partial,\n  value => {\n    currentPartial.value = value\n  }\n)\n\nif (groupState) {\n  let increased = false\n\n  watch(currentValue, (value, prevValue) => {\n    if (isFunction(groupState.replaceValue)) {\n      groupState.replaceValue(prevValue, value)\n    }\n  })\n  watch(\n    () => props.control,\n    value => {\n      if (value) {\n        if (increased) {\n          groupState.decreaseItem(currentValue.value, input)\n          increased = false\n        }\n\n        groupState.increaseControl(controlState)\n      } else {\n        groupState.decreaseControl(controlState)\n      }\n    },\n    { immediate: true }\n  )\n  watch(\n    () => groupState.currentValues,\n    value => {\n      if (!props.control) {\n        setCurrentChecked(value.includes(currentValue.value))\n      }\n    },\n    { immediate: true }\n  )\n\n  onMounted(() => {\n    if (!props.control) {\n      groupState.increaseItem(currentValue.value, currentChecked.value, input)\n      increased = true\n    }\n  })\n\n  onBeforeUnmount(() => {\n    if (!props.control) {\n      groupState.decreaseItem(currentValue.value, input)\n    } else {\n      groupState.decreaseControl(controlState)\n    }\n  })\n}\n\ndefineExpose({\n  idFor,\n  labelId,\n  currentChecked,\n  input,\n  focus: (options?: FocusOptions) => input.value?.focus(options),\n  blur: () => input.value?.blur()\n})\n\nfunction emitCheckEvent() {\n  const checked = currentChecked.value\n\n  emit('update:checked', checked)\n  setFieldValue(checked)\n  emitEvent(props.onChange, checked)\n}\n\nfunction setCurrentChecked(checked: boolean) {\n  if (props.control && isFunction(groupState?.handleControlChange)) {\n    groupState!.handleControlChange()\n  } else if (currentChecked.value !== checked) {\n    currentChecked.value = checked\n    emitCheckEvent()\n  }\n}\n\nfunction handleChange(checked: boolean) {\n  if (isDisabled.value || readonly.value) {\n    return\n  }\n\n  setCurrentChecked(checked)\n\n  if (!props.control && groupState) {\n    isFunction(groupState.setItemChecked) && groupState.setItemChecked(currentValue.value, checked)\n  }\n\n  if (!groupState) {\n    validateField()\n  }\n}\n\nfunction handleClick(event: MouseEvent) {\n  emitEvent(props.onClick, event)\n}\n</script>\n\n<template>\n  <label\n    :id=\"idFor\"\n    :class=\"className\"\n    :style=\"style\"\n    :aria-disabled=\"isDisabled\"\n    :aria-labelledby=\"labelId\"\n    @click=\"handleClick\"\n  >\n    <input\n      ref=\"input\"\n      type=\"checkbox\"\n      :class=\"nh.be('input')\"\n      :checked=\"currentChecked\"\n      :disabled=\"isDisabled || readonly\"\n      :tabindex=\"props.tabIndex\"\n      :name=\"props.name\"\n      @submit.prevent\n      @change=\"handleChange(!currentChecked)\"\n      @click.stop\n    />\n    <span :class=\"[nh.be('signal'), isLoading && nh.bem('signal', 'active')]\"></span>\n    <span v-if=\"hasLabel || slots.default\" :class=\"[nh.be('label'), props.labelClass]\">\n      <slot>{{ props.label }}</slot>\n    </span>\n  </label>\n</template>\n"],"names":["idFor","labelId","state","disabled","loading","size","validateField","getFieldValue","setFieldValue","useFieldStore","_a","input","props","useProps","__props","createSizeProp","createStateProp","emit","__emit","slots","_useSlots","groupState","inject","GROUP_STATE","nh","useNameHelper","currentChecked","ref","currentPartial","controlState","reactive","computedSize","computed","computedState","isDisabled","isLoading","isLoadingLock","stateColor","readonly","className","colorMap","baseColor","parseColorToRgba","adjustAlpha","style","base","opacity6","hasLabel","isDefined","currentValue","watch","value","setCurrentChecked","increased","prevValue","isFunction","onMounted","onBeforeUnmount","__expose","options","emitCheckEvent","checked","emitEvent","handleChange","handleClick","event"],"mappings":"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"}