{"version":3,"file":"CheckboxGroup.cjs","sources":["../../../../src/components/Checkbox/CheckboxGroup/CheckboxGroup.tsx"],"sourcesContent":["import { useUncontrolled } from '@raikou/hooks';\nimport { factory, Factory, RaikouSize, useProps } from '../../../core';\nimport { Input, InputWrapperProps, InputWrapperStylesNames } from '../../Input';\nimport { InputsGroupFieldset } from '../../InputsGroupFieldset';\nimport { CheckboxGroupProvider } from '../CheckboxGroup.context';\n\nexport type CheckboxGroupStylesNames = InputWrapperStylesNames;\n\nexport interface CheckboxGroupProps extends Omit<InputWrapperProps, 'onChange'> {\n  /** `Checkbox` components and any other elements */\n  children: React.ReactNode;\n\n  /** Controlled component value */\n  value?: string[];\n\n  /** Default value for uncontrolled component */\n  defaultValue?: string[];\n\n  /** Called with an array of selected checkboxes values when value changes */\n  onChange?: (value: string[]) => void;\n\n  /** Props passed down to the root element (`Input.Wrapper` component) */\n  wrapperProps?: Record<string, any>;\n\n  /** Controls size of the `Input.Wrapper`, `'sm'` by default */\n  size?: RaikouSize | (string & {});\n\n  /** If set, value cannot be changed */\n  readOnly?: boolean;\n}\n\nexport type CheckboxGroupFactory = Factory<{\n  props: CheckboxGroupProps;\n  ref: HTMLDivElement;\n  stylesNames: CheckboxGroupStylesNames;\n}>;\n\nconst defaultProps: Partial<CheckboxGroupProps> = {};\n\nexport const CheckboxGroup = factory<CheckboxGroupFactory>((props, ref) => {\n  const { value, defaultValue, onChange, size, wrapperProps, children, readOnly, ...others } =\n    useProps('CheckboxGroup', defaultProps, props);\n\n  const [_value, setValue] = useUncontrolled({\n    value,\n    defaultValue,\n    finalValue: [],\n    onChange,\n  });\n\n  const handleChange = (event: React.ChangeEvent<HTMLInputElement> | string) => {\n    const itemValue = typeof event === 'string' ? event : event.currentTarget.value;\n    !readOnly &&\n      setValue(\n        _value.includes(itemValue)\n          ? _value.filter((item) => item !== itemValue)\n          : [..._value, itemValue]\n      );\n  };\n\n  return (\n    <CheckboxGroupProvider value={{ value: _value, onChange: handleChange, size }}>\n      <Input.Wrapper\n        size={size}\n        ref={ref}\n        {...wrapperProps}\n        {...others}\n        labelElement=\"div\"\n        __staticSelector=\"CheckboxGroup\"\n      >\n        <InputsGroupFieldset role=\"group\">{children}</InputsGroupFieldset>\n      </Input.Wrapper>\n    </CheckboxGroupProvider>\n  );\n});\n\nCheckboxGroup.classes = Input.Wrapper.classes;\nCheckboxGroup.displayName = '@raikou/core/CheckboxGroup';\n"],"names":["factory","useProps","useUncontrolled","jsx","CheckboxGroupProvider","Input","InputsGroupFieldset"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqCA,MAAM,eAA4C,EAAC;AAE5C,MAAM,aAAgB,GAAAA,eAAA,CAA8B,CAAC,KAAA,EAAO,GAAQ,KAAA;AACzE,EAAA,MAAM,EAAE,KAAA,EAAO,YAAc,EAAA,QAAA,EAAU,MAAM,YAAc,EAAA,QAAA,EAAU,QAAU,EAAA,GAAG,MAAO,EAAA,GACvFC,iBAAS,CAAA,eAAA,EAAiB,cAAc,KAAK,CAAA;AAE/C,EAAA,MAAM,CAAC,MAAA,EAAQ,QAAQ,CAAA,GAAIC,qBAAgB,CAAA;AAAA,IACzC,KAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAY,EAAC;AAAA,IACb;AAAA,GACD,CAAA;AAED,EAAM,MAAA,YAAA,GAAe,CAAC,KAAwD,KAAA;AAC5E,IAAA,MAAM,YAAY,OAAO,KAAA,KAAU,QAAW,GAAA,KAAA,GAAQ,MAAM,aAAc,CAAA,KAAA;AAC1E,IAAA,CAAC,QACC,IAAA,QAAA;AAAA,MACE,MAAO,CAAA,QAAA,CAAS,SAAS,CAAA,GACrB,OAAO,MAAO,CAAA,CAAC,IAAS,KAAA,IAAA,KAAS,SAAS,CAAA,GAC1C,CAAC,GAAG,QAAQ,SAAS;AAAA,KAC3B;AAAA,GACJ;AAEA,EACE,uBAAAC,cAAA,CAACC,+CAAsB,KAAO,EAAA,EAAE,OAAO,MAAQ,EAAA,QAAA,EAAU,YAAc,EAAA,IAAA,EACrE,EAAA,QAAA,kBAAAD,cAAA;AAAA,IAACE,WAAM,CAAA,OAAA;AAAA,IAAN;AAAA,MACC,IAAA;AAAA,MACA,GAAA;AAAA,MACC,GAAG,YAAA;AAAA,MACH,GAAG,MAAA;AAAA,MACJ,YAAa,EAAA,KAAA;AAAA,MACb,gBAAiB,EAAA,eAAA;AAAA,MAEjB,QAAC,kBAAAF,cAAA,CAAAG,uCAAA,EAAA,EAAoB,IAAK,EAAA,OAAA,EAAS,QAAS,EAAA;AAAA;AAAA,GAEhD,EAAA,CAAA;AAEJ,CAAC;AAED,aAAc,CAAA,OAAA,GAAUD,YAAM,OAAQ,CAAA,OAAA;AACtC,aAAA,CAAc,WAAc,GAAA,4BAAA;;;;"}