/** * External dependencies */ import classnames from 'classnames'; /** * WordPress dependencies */ import { useInstanceId } from '@wordpress/compose'; import { Icon, check, reset } from '@wordpress/icons'; import { BaseControl, VisuallyHidden } from '@wordpress/components'; /** * Internal dependencies */ import './style.scss'; export default function CheckboxControl( { id, label, hideLabelFromVision, className, heading, checked, help, onChange, indeterminate, ...props } ) { const instanceId = useInstanceId( CheckboxControl ); id = id || `itsec-inspector-checkbox-control-${ instanceId }`; const onChangeValue = ( event ) => onChange( event.target.checked ); return ( <BaseControl label={ heading } id={ id } help={ help } className={ classnames( 'components-checkbox-control', className ) } > <span className="components-checkbox-control__input-container"> <input id={ id } className={ classnames( 'components-checkbox-control__input', { 'components-checkbox-control__input--indeterminate': indeterminate, } ) } type="checkbox" value="1" onChange={ onChangeValue } checked={ checked } aria-describedby={ !! help ? id + '__help' : undefined } { ...props } ref={ ( ref ) => ref && ( ref.indeterminate = indeterminate ) } /> { checked && ( <Icon icon={ check } className="components-checkbox-control__checked" role="presentation" /> ) } { indeterminate && ( <Icon icon={ reset } className="components-checkbox-control__checked" role="presentation" /> ) } </span> { label && ( hideLabelFromVision ? ( <VisuallyHidden as="label" htmlFor={ id }> { label } </VisuallyHidden> ) : ( <label className="components-checkbox-control__label" htmlFor={ id } > { label } </label> ) ) } </BaseControl> ); }