UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

63 lines (60 loc) 4.18 kB
import styled, { css } from 'styled-components'; import { variant, width, minWidth, maxWidth } from 'styled-system'; import { get } from './constants.js'; import sx from './sx.js'; const sizeDeprecatedVariants = variant({ variants: { small: { minHeight: '28px', px: 2, py: '3px', fontSize: 0, lineHeight: '20px' }, large: { px: 2, py: '10px', fontSize: 3 } } }); const sizeVariants = variant({ prop: 'size', variants: { small: { '--inner-action-size': '20px', minHeight: '28px', px: 2, py: '3px', fontSize: 0, lineHeight: '20px' }, medium: { '--inner-action-size': '24px' }, large: { '--inner-action-size': '28px', px: 2, py: '10px', height: '40px' } } }); const textInputBasePadding = '12px'; const textInputHorizPadding = textInputBasePadding; const renderFocusStyles = (hasTrailingAction, isInputFocused) => { if (hasTrailingAction) { return isInputFocused && css(["border-color:", ";outline:none;box-shadow:inset 0 0 0 1px ", ";"], get('colors.accent.fg'), get('colors.accent.fg')); } return css(["&:focus-within{border-color:", ";outline:none;box-shadow:inset 0 0 0 1px ", ";}"], get('colors.accent.fg'), get('colors.accent.fg')); }; const TextInputBaseWrapper = styled.span.withConfig({ displayName: "_TextInputWrapper__TextInputBaseWrapper", componentId: "sc-apywy2-0" })(["font-size:", ";line-height:20px;color:", ";vertical-align:middle;background-color:", ";border:1px solid ", ";border-radius:", ";outline:none;box-shadow:", ";display:inline-flex;align-items:stretch;min-height:32px;input,textarea{cursor:text;}select{cursor:pointer;}&::placeholder{color:", ";}", " > textarea{padding:", ";}", " ", " ", " ", " ", " ", " @media (min-width:", "){font-size:", ";}", " ", " ", " ", " ", " ", ";"], get('fontSizes.1'), get('colors.fg.default'), get('colors.canvas.default'), get('colors.border.default'), get('radii.2'), get('shadows.primer.shadow.inset'), get('colors.fg.subtle'), props => renderFocusStyles(Boolean(props.hasTrailingAction), Boolean(props.isInputFocused)), textInputBasePadding, props => props.contrast && css(["background-color:", ";"], get('colors.canvas.inset')), props => props.disabled && css(["color:", ";background-color:", ";border-color:", ";input,textarea,select{cursor:not-allowed;}"], get('colors.primer.fg.disabled'), get('colors.input.disabledBg'), get('colors.border.default')), props => props.monospace && css(["font-family:", ";"], get('fonts.mono')), props => props.validationStatus === 'error' && css(["border-color:", ";", ""], get('colors.danger.emphasis'), renderFocusStyles(Boolean(props.hasTrailingAction), Boolean(props.isInputFocused))), props => props.validationStatus === 'success' && css(["border-color:", ";"], get('colors.success.emphasis')), props => props.block && css(["width:100%;display:flex;align-self:stretch;"]), get('breakpoints.1'), get('fontSizes.1'), width, minWidth, maxWidth, sizeDeprecatedVariants, sizeVariants, sx); const TextInputWrapper = styled(TextInputBaseWrapper).withConfig({ displayName: "_TextInputWrapper__TextInputWrapper", componentId: "sc-apywy2-1" })(["background-repeat:no-repeat;background-position:right 8px center;& > :not(:last-child){margin-right:", ";}.TextInput-icon,.TextInput-action{align-self:center;color:", ";flex-shrink:0;}", " ", " ", ";"], get('space.2'), get('colors.fg.muted'), props => css(["padding-left:", ";padding-right:", ";> input,> select{padding-left:", ";padding-right:", ";}"], props.hasLeadingVisual ? textInputHorizPadding : 0, props.hasTrailingVisual && !props.hasTrailingAction ? textInputHorizPadding : 0, !props.hasLeadingVisual ? textInputHorizPadding : 0, !props.hasTrailingVisual && !props.hasTrailingAction ? textInputHorizPadding : 0), props => props.validationStatus === 'warning' && css(["border-color:", ";", ""], get('colors.attention.emphasis'), renderFocusStyles(Boolean(props.hasTrailingAction), Boolean(props.isInputFocused))), sx); var TextInputWrapper$1 = TextInputWrapper; export { TextInputBaseWrapper, TextInputWrapper$1 as default, textInputHorizPadding };