{"version":3,"sources":["../src/use-checkbox-group.ts"],"sourcesContent":["import type { PropGetter } from \"@yamada-ui/core\"\nimport type { Dict } from \"@yamada-ui/utils\"\nimport type { ChangeEvent, ReactNode } from \"react\"\nimport type { CheckboxProps } from \"./checkbox\"\nimport { useControllableState } from \"@yamada-ui/use-controllable-state\"\nimport { isObject, useCallbackRef } from \"@yamada-ui/utils\"\nimport { useCallback } from \"react\"\n\nexport interface CheckboxItem<Y extends number | string = string>\n  extends CheckboxProps<Y> {\n  label?: ReactNode\n}\n\nconst isEvent = (value: any): value is { target: HTMLInputElement } =>\n  value && isObject(value) && isObject(value.target)\n\nexport interface UseCheckboxGroupProps<Y extends number | string = string> {\n  /**\n   * The initial value of the checkbox group.\n   */\n  defaultValue?: Y[]\n  /**\n   * If `true`, input elements will receive `checked` attribute instead of `isChecked`.\n   *\n   * This assumes, you're using native radio inputs.\n   *\n   * @default false\n   *\n   * @deprecated It will be deprecated in version 2.0.\n   */\n  isNative?: boolean\n  /**\n   * The value of the checkbox group.\n   */\n  value?: Y[]\n  /**\n   * The callback fired when any children checkbox is checked or unchecked.\n   */\n  onChange?: (value: Y[]) => void\n}\n\nexport const useCheckboxGroup = <\n  Y extends number | string,\n  M extends Dict = Dict,\n>({\n  defaultValue = [],\n  isNative,\n  value: valueProp,\n  onChange: onChangeProp,\n  ...props\n}: M & UseCheckboxGroupProps<Y>) => {\n  const onChangeRef = useCallbackRef(onChangeProp)\n\n  const [value, setValue] = useControllableState({\n    defaultValue,\n    value: valueProp,\n    onChange: onChangeRef,\n  })\n\n  const onChange = useCallback(\n    (evOrValue: ChangeEvent<HTMLInputElement> | Y) => {\n      const isChecked = isEvent(evOrValue)\n        ? evOrValue.target.checked\n        : !value.includes(evOrValue)\n\n      const selectedValue = (\n        isEvent(evOrValue) ? evOrValue.target.value : evOrValue\n      ) as Y\n\n      const nextValue = isChecked\n        ? [...value, selectedValue]\n        : value.filter((v) => String(v) !== String(selectedValue))\n\n      setValue(nextValue)\n    },\n    [value, setValue],\n  )\n\n  const getContainerProps: PropGetter = useCallback(\n    (props = {}, ref = null) => ({\n      role: \"group\",\n      ...props,\n      ref,\n    }),\n    [],\n  )\n\n  const getCheckboxProps: PropGetter<\n    { value?: Y },\n    { checked?: boolean; isChecked?: boolean; value?: Y }\n  > = useCallback(\n    (props = {}, ref = null) => ({\n      ...props,\n      ref,\n      [isNative ? \"checked\" : \"isChecked\"]: value.some(\n        (val) => String(props.value) === String(val),\n      ),\n      ...(!isNative\n        ? { checked: value.some((val) => String(props.value) === String(val)) }\n        : {}),\n      onChange,\n    }),\n    [onChange, isNative, value],\n  )\n\n  return {\n    props,\n    setValue,\n    value,\n    getCheckboxProps,\n    getContainerProps,\n    onChange,\n  }\n}\n\nexport type UseCheckboxGroupReturn<Y extends number | string = string> =\n  ReturnType<typeof useCheckboxGroup<Y>>\n"],"mappings":";;;AAIA,SAAS,4BAA4B;AACrC,SAAS,UAAU,sBAAsB;AACzC,SAAS,mBAAmB;AAO5B,IAAM,UAAU,CAAC,UACf,SAAS,SAAS,KAAK,KAAK,SAAS,MAAM,MAAM;AA2B5C,IAAM,mBAAmB,CAG9B;AAAA,EACA,eAAe,CAAC;AAAA,EAChB;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,GAAG;AACL,MAAoC;AAClC,QAAM,cAAc,eAAe,YAAY;AAE/C,QAAM,CAAC,OAAO,QAAQ,IAAI,qBAAqB;AAAA,IAC7C;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC;AAED,QAAM,WAAW;AAAA,IACf,CAAC,cAAiD;AAChD,YAAM,YAAY,QAAQ,SAAS,IAC/B,UAAU,OAAO,UACjB,CAAC,MAAM,SAAS,SAAS;AAE7B,YAAM,gBACJ,QAAQ,SAAS,IAAI,UAAU,OAAO,QAAQ;AAGhD,YAAM,YAAY,YACd,CAAC,GAAG,OAAO,aAAa,IACxB,MAAM,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,OAAO,aAAa,CAAC;AAE3D,eAAS,SAAS;AAAA,IACpB;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,EAClB;AAEA,QAAM,oBAAgC;AAAA,IACpC,CAACA,SAAQ,CAAC,GAAG,MAAM,UAAU;AAAA,MAC3B,MAAM;AAAA,MACN,GAAGA;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,mBAGF;AAAA,IACF,CAACA,SAAQ,CAAC,GAAG,MAAM,UAAU;AAAA,MAC3B,GAAGA;AAAA,MACH;AAAA,MACA,CAAC,WAAW,YAAY,WAAW,GAAG,MAAM;AAAA,QAC1C,CAAC,QAAQ,OAAOA,OAAM,KAAK,MAAM,OAAO,GAAG;AAAA,MAC7C;AAAA,MACA,GAAI,CAAC,WACD,EAAE,SAAS,MAAM,KAAK,CAAC,QAAQ,OAAOA,OAAM,KAAK,MAAM,OAAO,GAAG,CAAC,EAAE,IACpE,CAAC;AAAA,MACL;AAAA,IACF;AAAA,IACA,CAAC,UAAU,UAAU,KAAK;AAAA,EAC5B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["props"]}