{"version":3,"file":"use-checkbox.mjs","sources":["../../../../../../../packages/components/checkbox/src/composables/use-checkbox.ts"],"sourcesContent":["import {\n  type ComponentInternalInstance,\n  computed,\n  inject,\n  onBeforeMount,\n  ref,\n  toRaw,\n} from 'vue'\nimport { isEqual, isNil, toArray } from 'lodash-unified'\nimport { isArray, isBoolean, isObject, isUndefined } from '@vuesax-alpha/utils'\nimport { UPDATE_MODEL_EVENT } from '@vuesax-alpha/constants'\nimport { useDisabled } from '@vuesax-alpha/hooks'\nimport { checkboxGroupContextKey } from '@vuesax-alpha/tokens'\nimport type {\n  CheckboxEmitsFn,\n  CheckboxProps,\n  CheckboxValueType,\n} from './../checkbox'\n\nconst setStoreValue = (\n  props: CheckboxProps,\n  { model }: Pick<UseCheckbox, 'model'>\n) => {\n  if (props.checked) {\n    if (isArray(model.value) && !model.value.includes(props.value)) {\n      model.value.push(props.value)\n    } else {\n      model.value = props.value || true\n    }\n  }\n}\n\nexport const useCheckbox = (\n  props: CheckboxProps,\n  emit: CheckboxEmitsFn,\n  slots: ComponentInternalInstance['slots']\n) => {\n  // self model check status\n  const selfModel = ref<boolean>(false)\n  const isLimitExceeded = ref<boolean>(false)\n\n  const checkboxGroup = inject(checkboxGroupContextKey, undefined)\n  const isGroup = computed(() => isUndefined(checkboxGroup) === false)\n\n  const isChecked = computed<boolean>(() => {\n    const value = model.value || checkboxGroup?.modelValue\n\n    if (isBoolean(value)) return value\n\n    if (isArray(value)) {\n      if (isObject(props.value)) {\n        return value.map(toRaw).some((o) => isEqual(o, props.value))\n      }\n      return value.map(toRaw).includes(props.value)\n    }\n\n    if (value !== null && value !== undefined) return value === props.value\n\n    if (props.checkedForce) return true\n\n    return !!value\n  })\n\n  const hasOwnLabel = computed<boolean>(() => {\n    return !!(slots.default || props.label)\n  })\n\n  const isLimitDisabled = computed(() => {\n    const max = Number(checkboxGroup?.max?.value || props.max)\n    const min = Number(checkboxGroup?.min?.value || props.min)\n\n    return (\n      (!isNil(max) && toArray(model.value).length >= max && !isChecked.value) ||\n      (!isNil(min) && toArray(model.value).length <= min && isChecked.value)\n    )\n  })\n\n  const isDisabled = useDisabled(\n    computed(() => checkboxGroup?.disabled.value || isLimitDisabled.value)\n  )\n\n  const model = computed({\n    get() {\n      return isGroup.value\n        ? checkboxGroup?.modelValue?.value\n        : props.modelValue || selfModel.value\n    },\n\n    set(val: CheckboxValueType) {\n      if (isDisabled.value || isLimitExceeded.value) return\n\n      if (isGroup.value && isArray(val)) {\n        isLimitExceeded.value =\n          checkboxGroup?.max?.value !== undefined &&\n          val.length > checkboxGroup?.max.value\n        isLimitExceeded.value === false && checkboxGroup?.changeEvent?.(val)\n        return\n      }\n\n      let updatedValue: CheckboxValueType = val\n      // have self value\n      if (val && props.value) {\n        updatedValue = props.value\n      }\n\n      if (isBoolean(updatedValue)) {\n        emit(UPDATE_MODEL_EVENT, updatedValue)\n      } else if (isArray(props.modelValue)) {\n        const modelValueRaw = props.modelValue.map(toRaw)\n\n        const indexVal = modelValueRaw.findIndex((e) =>\n          isEqual(e, updatedValue)\n        )\n\n        if (indexVal == -1) {\n          modelValueRaw.push(updatedValue)\n        } else {\n          modelValueRaw.splice(indexVal, 1)\n        }\n        emit('update:modelValue', modelValueRaw)\n      } else {\n        if (updatedValue !== props.modelValue) {\n          if (val) {\n            emit(UPDATE_MODEL_EVENT, [props.modelValue, updatedValue])\n          } else {\n            emit(UPDATE_MODEL_EVENT, updatedValue)\n          }\n        } else {\n          emit(UPDATE_MODEL_EVENT, props.notValue || false)\n        }\n      }\n\n      selfModel.value = !!val\n    },\n  })\n\n  onBeforeMount(() => {\n    if (props.checked || props.checkedForce) {\n      model.value = props.value || true\n    }\n  })\n\n  const getCheckboxValue = (value: string | number | boolean) => {\n    return value === props.value || value === true\n  }\n\n  const handleChange = (e: Event) => {\n    if (isLimitExceeded.value) return\n\n    const target = e.target as HTMLInputElement\n    emit('change', getCheckboxValue(target.checked))\n  }\n\n  setStoreValue(props, { model })\n\n  return {\n    isChecked,\n    isDisabled,\n    hasOwnLabel,\n    model,\n    handleChange,\n  }\n}\n\nexport type UseCheckbox = ReturnType<typeof useCheckbox>\n"],"names":[],"mappings":"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"}