{"version":3,"file":"useCheckbox.mjs","sources":["../../../../../../packages/components/checkbox/src/useCheckbox.ts"],"sourcesContent":["import { ref, computed, inject, watch, getCurrentInstance } from 'vue'\r\nimport { toTypeString } from '@vue/shared'\r\nimport { UPDATE_MODEL_EVENT } from '@sgui-plus/utils/constants'\r\nimport { isValidComponentSize } from '@sgui-plus/utils/validators'\r\n\r\nimport { useFormItem, useSize } from '@sgui-plus/hooks'\r\nimport { debugWarn } from '@sgui-plus/utils/error'\r\nimport { CheckboxGroupContextKey } from './checkbox.type'\r\nimport type { PropType, ExtractPropTypes } from 'vue'\r\nimport type { PartialReturnType } from '@sgui-plus/utils/types'\r\nimport type { ComponentSize } from '@sgui-plus/utils/size'\r\nimport type { ICheckboxGroupInstance } from './checkbox.type'\r\n\r\nexport const useCheckboxProps = {\r\n  modelValue: {\r\n    type: [Boolean, Number, String],\r\n    default: () => undefined,\r\n  },\r\n  label: {\r\n    type: [String, Boolean, Number, Object],\r\n  },\r\n  indeterminate: Boolean,\r\n  disabled: Boolean,\r\n  checked: Boolean,\r\n  id: {\r\n    type: String,\r\n    default: undefined,\r\n  },\r\n  controls: {\r\n    type: String,\r\n    default: undefined,\r\n  },\r\n  size: {\r\n    type: String as PropType<ComponentSize>,\r\n    validator: isValidComponentSize,\r\n  },\r\n  validateEvent: {\r\n    type: Boolean,\r\n    default: true,\r\n  }\r\n}\r\n\r\nexport type IUseCheckboxProps = ExtractPropTypes<typeof useCheckboxProps>\r\n\r\nexport const useCheckboxGroup = () => {\r\n  const { form, formItem } = useFormItem()\r\n  const checkboxGroup = inject<ICheckboxGroupInstance>(CheckboxGroupContextKey, {})\r\n  const isGroup = computed(\r\n    () => checkboxGroup && checkboxGroup?.name === 'SgCheckboxGroup'\r\n  )\r\n  const sgFormItemSize = computed(() => {\r\n    return formItem?.size\r\n  })\r\n  return {\r\n    isGroup,\r\n    checkboxGroup,\r\n    form,\r\n    sgFormItemSize,\r\n    formItem,\r\n  }\r\n}\r\n\r\nconst useModel = (props: IUseCheckboxProps) => {\r\n  const selfModel = ref(false)\r\n  // const { emit } = getCurrentInstance()\r\n  const { emit } = getCurrentInstance()!\r\n  const { isGroup, checkboxGroup } = useCheckboxGroup()\r\n  const isLimitExceeded = ref(false)\r\n  const model = computed({\r\n    get() {\r\n      return isGroup.value\r\n        ? checkboxGroup.modelValue?.value\r\n        : props.modelValue ?? selfModel.value\r\n    },\r\n\r\n    set(val: unknown) {\r\n      if (isGroup.value && Array.isArray(val)) {\r\n        isLimitExceeded.value =\r\n          checkboxGroup?.max?.value !== undefined &&\r\n          val.length > checkboxGroup?.max.value\r\n        isLimitExceeded.value === false && checkboxGroup?.changeEvent?.(val)\r\n      } else {\r\n        emit(UPDATE_MODEL_EVENT, val)\r\n        selfModel.value = val as boolean\r\n      }\r\n    },\r\n  })\r\n\r\n  return {\r\n    model,\r\n    isLimitExceeded,\r\n  }\r\n}\r\n\r\nconst useCheckboxStatus = (\r\n  props: IUseCheckboxProps,\r\n  { model }: PartialReturnType<typeof useModel>\r\n) => {\r\n  const { isGroup, checkboxGroup } = useCheckboxGroup()\r\n  const focus = ref(false)\r\n  const size = useSize(checkboxGroup?.checkboxGroupSize as any, { prop: true })\r\n  const isChecked = computed<boolean>(() => {\r\n    const value = model!.value\r\n    if (toTypeString(value) === '[object Boolean]') {\r\n      return value\r\n    } else if (Array.isArray(value)) {\r\n      return value.includes(props.label)\r\n    } else {\r\n      return !!value\r\n    }\r\n  })\r\n\r\n  const checkboxSize = useSize(\r\n    computed(() =>\r\n      isGroup.value ? checkboxGroup?.checkboxGroupSize?.value : undefined\r\n    ).value\r\n  )\r\n\r\n  return {\r\n    isChecked,\r\n    focus,\r\n    size,\r\n    checkboxSize,\r\n  }\r\n}\r\n\r\nconst useDisabled = (\r\n  props: IUseCheckboxProps,\r\n  {\r\n    model,\r\n    isChecked,\r\n  }: PartialReturnType<typeof useModel> &\r\n    PartialReturnType<typeof useCheckboxStatus>\r\n) => {\r\n  const { form, isGroup, checkboxGroup } = useCheckboxGroup()\r\n  const isLimitDisabled = computed(() => {\r\n    const max = checkboxGroup.max?.value\r\n    const min = checkboxGroup.min?.value\r\n    return (\r\n      (!!(max || min) && model!.value.length >= max! && !isChecked!.value) ||\r\n      (model!.value.length <= min! && isChecked!.value)\r\n    )\r\n  })\r\n  const isDisabled = computed(() => {\r\n    const disabled = props.disabled || form?.disabled\r\n    return (\r\n      (isGroup.value\r\n        ? checkboxGroup.disabled?.value || disabled || isLimitDisabled.value\r\n        : props.disabled || form?.disabled) ?? false\r\n    )\r\n  })\r\n\r\n  return {\r\n    isDisabled,\r\n    isLimitDisabled,\r\n  }\r\n}\r\n\r\nconst setStoreValue = (\r\n  props: IUseCheckboxProps,\r\n  { model }: PartialReturnType<typeof useModel>\r\n) => {\r\n  function addToStore() {\r\n    if (Array.isArray(model!.value) && !model!.value.includes(props.label)) {\r\n      model!.value.push(props.label)\r\n    } else {\r\n      model!.value = true\r\n    }\r\n  }\r\n  props.checked && addToStore()\r\n}\r\n\r\nconst useEvent = (\r\n  props: IUseCheckboxProps,\r\n  { isLimitExceeded }: PartialReturnType<typeof useModel>\r\n) => {\r\n  const checkboxGroup = inject(CheckboxGroupContextKey, undefined)\r\n  const { formItem } = useFormItem()\r\n  const { emit } = getCurrentInstance()!\r\n\r\n  function handleChange(e: InputEvent | Event) {\r\n    if (isLimitExceeded!.value) return\r\n    const target = e.target as HTMLInputElement\r\n    const value = target.checked\r\n    emit('on-change', value, e)\r\n  }\r\n\r\n  const validateEvent = computed(\r\n    () => checkboxGroup?.validateEvent || props.validateEvent\r\n  )\r\n\r\n  watch(\r\n    () => props.modelValue,\r\n    () => {\r\n      if (validateEvent.value) {\r\n        formItem?.validate('change').catch((err) => debugWarn(err))\r\n      }\r\n    }\r\n  )\r\n\r\n  return {\r\n    handleChange,\r\n  }\r\n}\r\n\r\nexport const useCheckbox = (props: IUseCheckboxProps) => {\r\n  const { model, isLimitExceeded } = useModel(props)\r\n  const { focus, size, isChecked, checkboxSize } = useCheckboxStatus(props, {\r\n    model,\r\n  })\r\n  const { isDisabled } = useDisabled(props, { model, isChecked })\r\n  const { handleChange } = useEvent(props, { isLimitExceeded })\r\n\r\n  setStoreValue(props, { model })\r\n\r\n  return {\r\n    isChecked,\r\n    isDisabled,\r\n    checkboxSize,\r\n    model,\r\n    handleChange,\r\n    focus,\r\n    size,\r\n  }\r\n}\r\n"],"names":[],"mappings":";;;;;;;;;;AAOY,MAAC,gBAAgB,GAAG;AAChC,EAAE,UAAU,EAAE;AACd,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;AACnC,IAAI,OAAO,EAAE,MAAM,KAAK,CAAC;AACzB,GAAG;AACH,EAAE,KAAK,EAAE;AACT,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;AAC3C,GAAG;AACH,EAAE,aAAa,EAAE,OAAO;AACxB,EAAE,QAAQ,EAAE,OAAO;AACnB,EAAE,OAAO,EAAE,OAAO;AAClB,EAAE,EAAE,EAAE;AACN,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,KAAK,CAAC;AACnB,GAAG;AACH,EAAE,QAAQ,EAAE;AACZ,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,KAAK,CAAC;AACnB,GAAG;AACH,EAAE,IAAI,EAAE;AACR,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,SAAS,EAAE,oBAAoB;AACnC,GAAG;AACH,EAAE,aAAa,EAAE;AACjB,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,OAAO,EAAE,IAAI;AACjB,GAAG;AACH,EAAE;AACU,MAAC,gBAAgB,GAAG,MAAM;AACtC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;AAC3C,EAAE,MAAM,aAAa,GAAG,MAAM,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;AAC5D,EAAE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,aAAa,IAAI,CAAC,aAAa,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,IAAI,MAAM,iBAAiB,CAAC,CAAC;AAC/H,EAAE,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM;AACxC,IAAI,OAAO,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;AACrD,GAAG,CAAC,CAAC;AACL,EAAE,OAAO;AACT,IAAI,OAAO;AACX,IAAI,aAAa;AACjB,IAAI,IAAI;AACR,IAAI,cAAc;AAClB,IAAI,QAAQ;AACZ,GAAG,CAAC;AACJ,EAAE;AACF,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK;AAC5B,EAAE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB,EAAE,CAAC;AACxC,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC;AACxD,EAAE,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AACrC,EAAE,MAAM,KAAK,GAAG,QAAQ,CAAC;AACzB,IAAI,GAAG,GAAG;AACV,MAAM,IAAI,EAAE,EAAE,EAAE,CAAC;AACjB,MAAM,OAAO,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,aAAa,CAAC,UAAU,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,GAAG,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;AAClJ,KAAK;AACL,IAAI,GAAG,CAAC,GAAG,EAAE;AACb,MAAM,IAAI,EAAE,EAAE,EAAE,CAAC;AACjB,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC/C,QAAQ,eAAe,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,aAAa,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,aAAa,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9M,QAAQ,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,CAAC,EAAE,GAAG,aAAa,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,WAAW,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9J,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;AACtC,QAAQ,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC;AAC9B,OAAO;AACP,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,OAAO;AACT,IAAI,KAAK;AACT,IAAI,eAAe;AACnB,GAAG,CAAC;AACJ,CAAC,CAAC;AACF,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK;AAChD,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC;AACxD,EAAE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3B,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACzG,EAAE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM;AACnC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AAC9B,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,kBAAkB,EAAE;AACpD,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACrC,MAAM,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzC,KAAK,MAAM;AACX,MAAM,OAAO,CAAC,CAAC,KAAK,CAAC;AACrB,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM;AAC9C,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,OAAO,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,aAAa,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,iBAAiB,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;AACxI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACZ,EAAE,OAAO;AACT,IAAI,SAAS;AACb,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,YAAY;AAChB,GAAG,CAAC;AACJ,CAAC,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE;AAC5B,EAAE,KAAK;AACP,EAAE,SAAS;AACX,CAAC,KAAK;AACN,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAC9D,EAAE,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM;AACzC,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC;AACf,IAAI,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,aAAa,CAAC,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;AACrE,IAAI,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,aAAa,CAAC,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;AACrE,IAAI,OAAO,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC;AAC3H,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM;AACpC,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC;AACf,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/E,IAAI,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,aAAa,CAAC,QAAQ,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,eAAe,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC;AACpN,GAAG,CAAC,CAAC;AACL,EAAE,OAAO;AACT,IAAI,UAAU;AACd,IAAI,eAAe;AACnB,GAAG,CAAC;AACJ,CAAC,CAAC;AACF,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK;AAC5C,EAAE,SAAS,UAAU,GAAG;AACxB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC1E,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACpC,KAAK,MAAM;AACX,MAAM,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,GAAG;AACH,EAAE,KAAK,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;AAChC,CAAC,CAAC;AACF,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,KAAK;AACjD,EAAE,MAAM,aAAa,GAAG,MAAM,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC,CAAC;AAChE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;AACrC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB,EAAE,CAAC;AACxC,EAAE,SAAS,YAAY,CAAC,CAAC,EAAE;AAC3B,IAAI,IAAI,eAAe,CAAC,KAAK;AAC7B,MAAM,OAAO;AACb,IAAI,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;AACjC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAChC,GAAG;AACH,EAAE,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,CAAC,CAAC;AAC9H,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,UAAU,EAAE,MAAM;AACtC,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE;AAC7B,MAAM,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7F,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,OAAO;AACT,IAAI,YAAY;AAChB,GAAG,CAAC;AACJ,CAAC,CAAC;AACU,MAAC,WAAW,GAAG,CAAC,KAAK,KAAK;AACtC,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,iBAAiB,CAAC,KAAK,EAAE;AAC5E,IAAI,KAAK;AACT,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAClE,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;AAChE,EAAE,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAClC,EAAE,OAAO;AACT,IAAI,SAAS;AACb,IAAI,UAAU;AACd,IAAI,YAAY;AAChB,IAAI,KAAK;AACT,IAAI,YAAY;AAChB,IAAI,KAAK;AACT,IAAI,IAAI;AACR,GAAG,CAAC;AACJ;;;;"}