{"version":3,"file":"checkbox.vue.mjs","sources":["../../../../../../packages/components/checkbox/src/checkbox.vue"],"sourcesContent":["<script lang=\"ts\">\n  import { defineComponent, inject, computed, ref, watch } from 'vue'\n  import { getNamespace, getComponentNamespace } from '../../../utils/global-config'\n  import { useFormItem } from '../../form/src/hooks/use-form-item'\n  import { NOOP } from '../../../shared/utils'\n  import { checkboxGroupContextKey } from './constant'\n  import { checkboxProps } from './props'\n  import RenderIcon from './icon'\n\n  import type { CheckboxGroupContext } from './types'\n\n  export default defineComponent({\n    name: getComponentNamespace('Checkbox'),\n    components: {\n      RenderIcon\n    },\n    props: checkboxProps,\n    emits: ['update:modelValue', 'change'],\n    setup(props, { emit, slots }) {\n      const ns = getNamespace('checkbox')\n      const checkboxGroup = inject<CheckboxGroupContext | null>(checkboxGroupContextKey, null)\n      const isGroup = computed(() => !!checkboxGroup)\n      const selfModel = ref<boolean>(false)\n\n      const model = computed({\n        get() {\n          return isGroup.value\n            ? checkboxGroup?.modelValue?.value\n            : props.modelValue ?? selfModel.value\n        },\n        set(val) {\n          if (isGroup.value) {\n            checkboxGroup?.changeEvent?.(val)\n          } else {\n            emit('update:modelValue', val)\n            selfModel.value = val\n          }\n        }\n      })\n\n      const isChecked = computed(() => {\n        const value = model.value\n        if (Array.isArray(value)) {\n          return value.includes(props.label)\n        }\n        return value\n      })\n\n      const isFocused = ref(false)\n\n      const { formItem } = useFormItem()\n\n      const cls = computed(() => {\n        const cls = [ns]\n        props.disabled && cls.push('is-disabled')\n        if (isGroup.value) {\n          isChecked.value && cls.push('is-checked')\n        } else {\n          props.modelValue && cls.push('is-checked')\n        }\n\n        if (props.indeterminate && !props.modelValue) {\n          cls.push('is-indeterminate')\n        }\n\n        if (isFocused.value) {\n          cls.push('is-focus')\n        }\n\n        return cls\n      })\n\n      const isShowLabel = computed(() => slots['default'] || props.label)\n\n      const handleChange = (e: InputEvent) => {\n        const target = e.target as HTMLInputElement\n        const changeValue = target.checked\n        emit('change', changeValue)\n      }\n\n      const validateEvent = computed(() => checkboxGroup?.validateEvent || props.validateEvent)\n\n      // 接入form-item的表单验证\n      watch(\n        () => props.modelValue,\n        () => {\n          if (validateEvent.value) {\n            formItem?.validate('change').catch(NOOP)\n          }\n        }\n      )\n\n      return {\n        ns,\n        cls,\n        handleChange,\n        model,\n        isChecked,\n        isFocused,\n        isShowLabel\n      }\n    }\n  })\n</script>\n\n<template>\n  <label :class=\"cls\">\n    <slot name=\"icon\" :checked=\"isChecked\" :indeterminate=\"indeterminate\">\n      <RenderIcon :is-checked=\"isChecked\" :indeterminate=\"indeterminate\" />\n    </slot>\n    <span :class=\"[`${ns}__input`]\">\n      <input\n        v-model=\"model\"\n        :class=\"[`${ns}__origin`]\"\n        type=\"checkbox\"\n        :name=\"name\"\n        :disabled=\"disabled\"\n        :checked=\"isChecked\"\n        :indeterminate=\"indeterminate\"\n        :value=\"label\"\n        @change=\"handleChange\"\n        @focus=\"isFocused = true\"\n        @blur=\"isFocused = false\"\n      />\n    </span>\n    <span v-if=\"isShowLabel\" :class=\"[`${ns}__label`]\">\n      <slot>{{ label }}</slot>\n    </span>\n  </label>\n</template>\n"],"names":["_resolveComponent","_normalizeClass","indeterminate","_createVNode","_createElementVNode","name","isChecked","label","isFocused","model","isShowLabel","_openBlock","_createElementBlock","ns"],"mappings":";;;;;;gCA0GEA,iBAsBQ,YAAA,CAAA,CAAA;;;;MArBN,KAAA,EAEOC,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA;AAAA,KAAA;AAAA;iBAFiC,IAAeC,CAAAA,MAAAA,EAAAA,MAAAA,EAAAA;AAAAA,QAEhD,SAAA,IAAA,CAAA,SAAA;AAAA,QADL,eAAqE,IAAA,CAAA,aAAA;AAAA,SAAxD,MAAA;AAAA,QAAAC,YAAwB,qBAA4B,EAAA;AAAA,UAAA,cAAA,IAAA,CAAA,SAAA;AAAA;WAgB5D,IAAA,EAAA,CAAA,EAAA,CAAA,YAAA,EAAA,eAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAAA;;;+BAbL,CAAA,CAYE,CAAA,EAAA,IAAA,CAAA,WAAA,CAAA,CAAA;AAAA,SAAA;AAAA;yBAVMC,mBAAQ,OAAA,EAAA;AAAA,YACd,qBAAA,EAAe,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,KAAA,GAAA,MAAA,CAAA;AAAA,YACd,OAAMC,cAAI,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,YAAA,CAAA,CAAA;AAAA,YACV,IAAA,EAAA,UAAA;AAAA,YACA,MAASC,IAAAA,CAAAA,IAAAA;AAAAA,YACT,UAAeJ,IAAAA,CAAAA,QAAAA;AAAAA,YACf,SAAOK,IAAAA,CAAAA,SAAAA;AAAAA,YACP,eAAM,IAAA,CAAA,aAAA;AAAA,YACN,OAAK,IAAA,CAAA,KAAA;AAAA,YACL,QAAI,EAAA,MAAA,iCAAEC,IAAS,CAAA,YAAA,IAAA,IAAA,CAAA,YAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,YAAA,OAAA,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,SAAA,GAAA,IAAA,CAAA;AAAA,6BAVPC,KAAAA,MAAAA,CAAK,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,SAAA,GAAA,KAAA,CAAA;AAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EAAA;AAAA;WAaNC,CAAAA;AAAAA,SAAAA;AAAAA;;;MAAmB,IAAA,CAAA,WAAA,IAAAC,SAAA,EAAA,EAAAC,kBAAA;AAAA,QAAMC,MAAAA;AAAAA,QAAE;AAAA,UAAA,GAAA,EAAA,CAAA;AAAA,UACrC,OAAwBZ,cAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,WAAA,CAAA,CAAA;AAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;"}