{"version":3,"file":"checkbox.vue2.cjs","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","__props","props","useProps","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","_createElementBlock","_unref","_createElementVNode","_normalizeClass","_cache","$event","_renderSlot","_ctx","_createTextVNode","_toDisplayString"],"mappings":"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"}