Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import React from 'react';
import PropTypes from 'prop-types';
import InfotipContent from './InfotipContent';
import InfotipIcon from './InfotipIcon';
const BUTTON_SIZE = '16px';
const buttonStyle = {
background: 'transparent',
border: 0,
padding: 0,
width: BUTTON_SIZE,
height: BUTTON_SIZE,
WebkitTouchCallout: 'none',
WebkitUserSelect: 'none',
userSelect: 'none',
};
// TODO: We may want to improve this by tracking touch positions to ensure
// that a 'touchend' event must be reasonably close to the tooltip target.
const touchHandlers = {
onTouchStart: (e) => {
e.stopPropagation();
},
onTouchEnd: (e) => {
if (document.activeElement !== e.currentTarget) {
e.preventDefault();
e.currentTarget.focus();
} else {
e.preventDefault();
e.currentTarget.blur();
}
},
};
/**
* Tooltip with styled information icon
*/
const Infotip = ({ ariaLabel, label, lightIcon, ...props }) => (
<InfotipContent label={label} {...props}>
<button
type="button"
aria-label={ariaLabel}
style={buttonStyle}
{...touchHandlers}
>
<InfotipIcon
lightIcon={lightIcon}
width={BUTTON_SIZE}
height={BUTTON_SIZE}
aria-hidden
style={{ float: 'left' }}
/>
</button>
</InfotipContent>
);
Infotip.propTypes = {
label: PropTypes.string.isRequired,
ariaLabel: PropTypes.string,
lightIcon: PropTypes.bool,
DEBUG_STYLE: PropTypes.bool,
};
Infotip.defaultProps = {
ariaLabel: 'Information',
lightIcon: false,
DEBUG_STYLE: undefined,
};
export default Infotip;
|