{"version":3,"sources":["../src/use-checkbox-group.ts"],"sourcesContent":["import { useCallbackRef } from \"@chakra-ui/react-use-callback-ref\"\nimport { useControllableState } from \"@chakra-ui/react-use-controllable-state\"\nimport { isObject } from \"@chakra-ui/shared-utils\"\nimport { useCallback } from \"react\"\nimport { EventOrValue, UseCheckboxGroupProps } from \"./checkbox-types\"\n\nfunction isInputEvent(value: any): value is { target: HTMLInputElement } {\n  return value && isObject(value) && isObject(value.target)\n}\n\n/**\n * React hook that provides all the state management logic\n * for a group of checkboxes.\n *\n * It is consumed by the `CheckboxGroup` component\n *\n * @see Docs https://chakra-ui.com/docs/hooks/use-checkbox-group\n * @see WAI-ARIA https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/\n */\nexport function useCheckboxGroup(props: UseCheckboxGroupProps = {}) {\n  const {\n    defaultValue,\n    value: valueProp,\n    onChange,\n    isDisabled,\n    isNative,\n  } = props\n\n  const onChangeProp = useCallbackRef(onChange)\n\n  const [value, setValue] = useControllableState({\n    value: valueProp,\n    defaultValue: defaultValue || [],\n    onChange: onChangeProp,\n  })\n\n  const handleChange = useCallback(\n    (eventOrValue: EventOrValue) => {\n      if (!value) return\n\n      const isChecked = isInputEvent(eventOrValue)\n        ? eventOrValue.target.checked\n        : !value.includes(eventOrValue)\n\n      const selectedValue = isInputEvent(eventOrValue)\n        ? eventOrValue.target.value\n        : eventOrValue\n\n      const nextValue = isChecked\n        ? [...value, selectedValue]\n        : value.filter((v) => String(v) !== String(selectedValue))\n\n      setValue(nextValue)\n    },\n    [setValue, value],\n  )\n\n  const getCheckboxProps = useCallback(\n    (props: Record<string, any> = {}) => {\n      const checkedKey = isNative ? \"checked\" : \"isChecked\"\n      return {\n        ...props,\n        [checkedKey]: value.some((val) => String(props.value) === String(val)),\n        onChange: handleChange,\n      }\n    },\n    [handleChange, isNative, value],\n  )\n\n  return {\n    value,\n    isDisabled,\n    onChange: handleChange,\n    setValue,\n    getCheckboxProps,\n  }\n}\n\nexport type UseCheckboxGroupReturn = ReturnType<typeof useCheckboxGroup>\n"],"mappings":";;;AAAA,SAAS,sBAAsB;AAC/B,SAAS,4BAA4B;AACrC,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAG5B,SAAS,aAAa,OAAmD;AACvE,SAAO,SAAS,SAAS,KAAK,KAAK,SAAS,MAAM,MAAM;AAC1D;AAWO,SAAS,iBAAiB,QAA+B,CAAC,GAAG;AAClE,QAAM;AAAA,IACJ;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,eAAe,eAAe,QAAQ;AAE5C,QAAM,CAAC,OAAO,QAAQ,IAAI,qBAAqB;AAAA,IAC7C,OAAO;AAAA,IACP,cAAc,gBAAgB,CAAC;AAAA,IAC/B,UAAU;AAAA,EACZ,CAAC;AAED,QAAM,eAAe;AAAA,IACnB,CAAC,iBAA+B;AAC9B,UAAI,CAAC;AAAO;AAEZ,YAAM,YAAY,aAAa,YAAY,IACvC,aAAa,OAAO,UACpB,CAAC,MAAM,SAAS,YAAY;AAEhC,YAAM,gBAAgB,aAAa,YAAY,IAC3C,aAAa,OAAO,QACpB;AAEJ,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,UAAU,KAAK;AAAA,EAClB;AAEA,QAAM,mBAAmB;AAAA,IACvB,CAACA,SAA6B,CAAC,MAAM;AACnC,YAAM,aAAa,WAAW,YAAY;AAC1C,aAAO;AAAA,QACL,GAAGA;AAAA,QACH,CAAC,UAAU,GAAG,MAAM,KAAK,CAAC,QAAQ,OAAOA,OAAM,KAAK,MAAM,OAAO,GAAG,CAAC;AAAA,QACrE,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,CAAC,cAAc,UAAU,KAAK;AAAA,EAChC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,EACF;AACF;","names":["props"]}