grommet/grommet

View on GitHub
src/js/utils/general-prop-types.js

Summary

Maintainability
F
3 days
Test Coverage
import PropTypes from 'prop-types';

export const a11yTitlePropType = PropTypes.string;

export const alignPropType = PropTypes.oneOfType([
  PropTypes.oneOf(['baseline', 'center', 'end', 'start', 'stretch']),
  PropTypes.string,
]);

const ANIMATION_TYPE = PropTypes.oneOf([
  'fadeIn',
  'fadeOut',
  'jiggle',
  'pulse',
  'rotateLeft',
  'rotateRight',
  'slideUp',
  'slideDown',
  'slideLeft',
  'slideRight',
  'zoomIn',
  'zoomOut',
]);
const ANIMATION_SHAPE = PropTypes.shape({
  type: ANIMATION_TYPE,
  delay: PropTypes.number,
  duration: PropTypes.number,
  size: PropTypes.oneOf(['xsmall', 'small', 'medium', 'large', 'xlarge']),
});

export const animationPropType = PropTypes.oneOfType([
  ANIMATION_TYPE,
  ANIMATION_SHAPE,
  PropTypes.arrayOf(PropTypes.oneOfType([ANIMATION_TYPE, ANIMATION_SHAPE])),
]);

export const colorPropType = PropTypes.oneOfType([
  PropTypes.string,
  PropTypes.shape({ dark: PropTypes.string, light: PropTypes.string }),
]);

export const backgroundPropType = PropTypes.oneOfType([
  PropTypes.string,
  PropTypes.shape({
    clip: PropTypes.oneOfType([PropTypes.oneOf(['text']), PropTypes.string]),
    color: colorPropType,
    dark: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
    image: PropTypes.string,
    position: PropTypes.string,
    opacity: PropTypes.oneOfType([
      PropTypes.string,
      PropTypes.bool,
      PropTypes.number,
      PropTypes.oneOf(['weak', 'medium', 'strong']),
    ]),
    repeat: PropTypes.oneOfType([
      PropTypes.oneOf(['no-repeat', 'repeat']),
      PropTypes.string,
    ]),
    rotate: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    size: PropTypes.oneOfType([
      PropTypes.oneOf(['cover', 'contain']),
      PropTypes.string,
    ]),
    light: PropTypes.string,
  }),
]);

export const backgroundDoc = backgroundPropType;

export const MARGIN_SIZES = [
  'xxsmall',
  'xsmall',
  'small',
  'medium',
  'large',
  'xlarge',
];

export const marginProp = PropTypes.oneOfType([
  PropTypes.oneOf(['none', ...MARGIN_SIZES]),
  PropTypes.shape({
    bottom: PropTypes.oneOfType([
      PropTypes.oneOf(MARGIN_SIZES),
      PropTypes.string,
    ]),
    end: PropTypes.oneOfType([PropTypes.oneOf(MARGIN_SIZES), PropTypes.string]),
    horizontal: PropTypes.oneOfType([
      PropTypes.oneOf(MARGIN_SIZES),
      PropTypes.string,
    ]),
    left: PropTypes.oneOfType([
      PropTypes.oneOf(MARGIN_SIZES),
      PropTypes.string,
    ]),
    right: PropTypes.oneOfType([
      PropTypes.oneOf(MARGIN_SIZES),
      PropTypes.string,
    ]),
    start: PropTypes.oneOfType([
      PropTypes.oneOf(MARGIN_SIZES),
      PropTypes.string,
    ]),
    top: PropTypes.oneOfType([PropTypes.oneOf(MARGIN_SIZES), PropTypes.string]),
    vertical: PropTypes.oneOfType([
      PropTypes.oneOf(MARGIN_SIZES),
      PropTypes.string,
    ]),
  }),
  PropTypes.string,
]);

const PAD_SIZES = ['xxsmall', 'xsmall', 'small', 'medium', 'large', 'xlarge'];

export const padPropType = PropTypes.oneOfType([
  PropTypes.oneOf(['none', ...PAD_SIZES]),
  PropTypes.shape({
    bottom: PropTypes.oneOfType([PropTypes.oneOf(PAD_SIZES), PropTypes.string]),
    end: PropTypes.oneOfType([PropTypes.oneOf(PAD_SIZES), PropTypes.string]),
    horizontal: PropTypes.oneOfType([
      PropTypes.oneOf(PAD_SIZES),
      PropTypes.string,
    ]),
    left: PropTypes.oneOfType([PropTypes.oneOf(PAD_SIZES), PropTypes.string]),
    right: PropTypes.oneOfType([PropTypes.oneOf(PAD_SIZES), PropTypes.string]),
    start: PropTypes.oneOfType([PropTypes.oneOf(PAD_SIZES), PropTypes.string]),
    top: PropTypes.oneOfType([PropTypes.oneOf(PAD_SIZES), PropTypes.string]),
    vertical: PropTypes.oneOfType([
      PropTypes.oneOf(PAD_SIZES),
      PropTypes.string,
    ]),
  }),
  PropTypes.string,
]);

export const genericProps = {
  a11yTitle: a11yTitlePropType,
  alignSelf: PropTypes.oneOf(['start', 'center', 'end', 'stretch', 'baseline']),
  gridArea: PropTypes.string,
  margin: marginProp,
};

export const elevationPropType = PropTypes.oneOfType([
  PropTypes.oneOf(['none', 'xsmall', 'small', 'medium', 'large', 'xlarge']),
  PropTypes.string,
]);

export const hoverIndicatorPropType = PropTypes.oneOfType([
  PropTypes.bool,
  PropTypes.string,
  PropTypes.oneOf(['background']),
  backgroundPropType,
  PropTypes.shape({
    background: backgroundPropType,
    elevation: elevationPropType,
  }),
]);

export const pointPropType = PropTypes.oneOf([
  'circle',
  'diamond',
  'square',
  'star',
  'triangle',
  'triangleDown',
]);

export const patternPropType = PropTypes.oneOf([
  'squares',
  'circles',
  'stripesHorizontal',
  'stripesVertical',
  'stripesDiagonalDown',
  'stripesDiagonalUp',
]);

export const roundPropType = PropTypes.oneOfType([
  PropTypes.bool,
  PropTypes.oneOf(['xsmall', 'small', 'medium', 'large', 'xlarge', 'full']),
  PropTypes.string,
  PropTypes.shape({
    corner: PropTypes.oneOf([
      'top',
      'left',
      'bottom',
      'right',
      'top-left',
      'top-right',
      'bottom-left',
      'bottom-right',
    ]),
    size: PropTypes.oneOfType([
      PropTypes.oneOf(['xsmall', 'small', 'medium', 'large', 'xlarge']),
      PropTypes.string,
    ]),
  }),
]);

export const skeletonColorsPropType = PropTypes.shape({
  dark: PropTypes.arrayOf(PropTypes.string),
  light: PropTypes.arrayOf(PropTypes.string),
});

export const skeletonPropType = PropTypes.oneOfType([
  PropTypes.bool,
  PropTypes.shape({
    animation: animationPropType,
    colors: skeletonColorsPropType,
    depth: PropTypes.number,
    message: PropTypes.oneOfType([
      PropTypes.string,
      PropTypes.shape({
        start: PropTypes.string,
        end: PropTypes.string,
      }),
    ]),
  }),
]);

const dimSizeType = PropTypes.oneOf([
  'xxsmall',
  'xsmall',
  'small',
  'medium',
  'large',
  'xlarge',
  'xxlarge',
]);

export const heightPropType = PropTypes.oneOfType([
  dimSizeType,
  PropTypes.string,
  PropTypes.shape({
    height: PropTypes.oneOfType([dimSizeType, PropTypes.string]),
    min: PropTypes.oneOfType([dimSizeType, PropTypes.string]),
    max: PropTypes.oneOfType([dimSizeType, PropTypes.string]),
  }),
]);

export const widthPropType = PropTypes.oneOfType([
  dimSizeType,
  PropTypes.string,
  PropTypes.shape({
    width: PropTypes.oneOfType([dimSizeType, PropTypes.string]),
    min: PropTypes.oneOfType([dimSizeType, PropTypes.string]),
    max: PropTypes.oneOfType([dimSizeType, PropTypes.string]),
  }),
]);

export const OVERFLOW_VALUES = ['auto', 'hidden', 'scroll', 'visible'];