0.0.68 • Published 3 years ago

styled-velocity v0.0.68

Weekly downloads
61
License
MIT
Repository
github
Last release
3 years ago

Styled-Velocity

Styled-Velocity, a React-based styled prop and UI library to increase your velocity and help build your Design System.

Install

yarn add styled-velocity

or

npm install styled-velocity

sharedProps

Import example:

import { appearanceProps, cssProps, dimensionProps } from 'styled-velocity'

Components

All of the following have access to the sharedProps.

Import example:

import { Element } 'styled-velocity'

createStyle

Available sharedProps

importpropcss propertyconversionType
appearancePropsbgbackground
""bgImagebackground-image
""bgSizebackground-size
""borderRadiusborder-radius
""boxShadowbox-shadow
cssPropscssany css
dimensionPropsmmarginpercentageOrPixel
""mtmargin-top""
""mbmargin-bottom""
""mlmargin-left""
""mrmargin-right""
""mxml and mr""
""mymt and mb""
""ppadding""
""ptpadding-top""
""pbpadding-bottom""
""plpadding-left""
""prpadding-right""
""pxpl and pr""
""pypt and pb""
""hheight""
""wwidth, flex-basis""
""minhmin-height""
""minwmin-width""
""maxhmax-height""
""maxwmax-width""
""ccw and chgetCells
""cwcells wide""
""chcells height (cells tall)""
""cmcells margin""
""cmlcells margin-left""
""cmrcells margin-right""
""cmtcells margin-top""
""cmbcells margin-bottom""
""cmxcml and cmr""
""cmycmt and cmb""
""cpcells padding""
""cplcells padding-left""
""cprcells padding-right""
""cptcells padding-top""
""cpbcells padding-bottom""
""cpxcpl and cpr""
""cpycpt and cpb""
""ctransformcells transformgetCellsTranslate
displayModedisplayModeoutputs bounding box color
flexPropsdirectionflex-directiongetFlexProperty
""wrapflex-wrap""
""alignjustify-content""
""valignalign-items""
""valignContentalign-content""
gridLinesgridLinesoutputs grid lines
growShrinkPropsgrowflex-growbooleanToIntString
""shrinkflex-shrink""
positionPropsttoppercentageOrPixel
""bbottom""
""lleft""
""rright""
""xr and l""
""yt and b""
""ctcells topgetCells
""cbcells bottom""
""clcells left""
""crcells right""
""cxcr and cl""
""cyct and cb""
""positionposition
""zz-index
textPropscolorcolor
""textAligntext-align
""textTransformtext-transform
""fontFamilyfont-family
""fontSizefont-sizepercentageOrPixel
""fontWeightfont-weight
""lineHeightline-height

Breakpoints

About

All of the sharedProps can take a single value, or an object of Breakpoints. You have all the choices you could possibly use for creating style within breakpoints. This system is mobile first, but there's several ways to mix it up.

Example

Let's using the width css property for the following examples...

No breakpoint
w={50}
Mobile: 50, Tablet: 100, Desktop: 150

If you want to create a breakpoint, supply an object, and use the key as the breakpoint. Make sure to give the lowest a 0, if it's min-width 0, it won't wrap it in a media query.

w={{ 0: 50, 768: 100, 1024: 150 }}

returns

width: 50px;

@media (min-width: 768px) {
  width: 100px;
}
@media (min-width: 1024px) {
  width: 150px;
}
Mobile: 50, Tablet: 100, Desktop

If you want to create a breakpoint that has min and max, supply a key that is a string like so...

w={{ '768-1024': 100 }}

returns

@media (min-width: 768px) and (max-width: 1024px) {
  width: 100px;
}

Pretty cool, eh?

Scaling Font Sizes

This min-max string key is how the scaling pixel values work. If you wanted to scale anything from one pixel value to another, like font-size for instance, you can do this...

fontSize={{
  0: 12,
  '414-1023': { min: 12, max: 36 },
  1024: 36
}}

returns

font-size: 12px;

@media (min-width: 414px) and (max-width: 1023px) {
  A css formula to scale the font-size from 12px to 36px based on screen width
}

@media (min-width: 1024px) {
  font-size: 36px;
}

conversionType

Notice the conversionType? This should clue you into what is possible for the given prop.

percentageOrPixel

You can pass is an int like 50 and it'll convert to 50px. You can pass it a fraction, like 1 / 2 and it'll convert to a 50%. You can also just pass a string like 50em.

booleanToIntString

Used for grow and shrink, if you pass true, it'll convert to 1 for css purposes. And false to 0.

getCells

This takes an int and converts it to the cells width (or height). Thus cw={2} makes the element 2 cells wide (based on your grid config).

getCellsTranslate

Similar to getCells, but takes an object. ctransform={{ 0: {x: 0.5, y: 0} }} would offset the x coords of the element by 1/2 cells width.

getFlexProperty

Flex has some pretty unintuitive properties. For instance, valign="top" refers to the vertical alignment an element (assuming you staying with direction=row). You can of course pass the original css flex properties as well if you are used to them.

inputoutput
topflex-start
leftflex-start
startflex-start
bottomflex-end
rightflex-end
endflex-end
middlecenter
centercenter

Polyfill

In order to use this package on IE, you'll need a polyfill for String.prototype.includes. You can do this with loading a polyfill script from https://polyfill.io/, such as

<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.includes" async></script>

Using Next.js?

With Next.js you can load polyfills another way. See https://github.com/zeit/next.js/blob/canary/examples/with-polyfills/client/polyfills.js.

Add following to client/polyfills.js

/*
 * This files runs at the very beginning (even before React and Next.js core)
 * https://github.com/zeit/next.js/blob/canary/examples/with-polyfills/client/polyfills.js
 */

/* eslint no-extend-native: 0 */
// core-js comes with Next.js. So, you can import it like below
import stringIncludes from 'core-js/library/fn/string/virtual/includes'

// Add your polyfills
String.prototype.includes = stringIncludes

And then modify the next.config.js

// next.config.js

const nextConfig = {
  webpack(config) {

    /*
     * Add polyfills
     * https://github.com/zeit/next.js/blob/canary/examples/with-polyfills/next.config.js
     */

    const originalEntry = config.entry
    config.entry = async () => {
      const entries = await originalEntry()

      if (entries['main.js'] && !entries['main.js'].includes('./client/polyfills.js')) {
        entries['main.js'].unshift('./client/polyfills.js')
      }

      return entries
    }

    return config
  },
}

module.exports = nextConfig
0.0.67

3 years ago

0.0.68

3 years ago

0.0.66

3 years ago

0.0.65

3 years ago

0.0.64-no-ie

3 years ago

0.0.64

3 years ago

0.0.63

3 years ago

0.0.62

4 years ago

0.0.61

4 years ago

0.0.60

4 years ago

0.0.59

4 years ago

0.0.58

4 years ago

0.0.56

4 years ago

0.0.57

4 years ago

0.0.55

4 years ago

0.0.54

4 years ago

0.0.53

4 years ago

0.0.52

5 years ago

0.0.51

5 years ago

0.0.50

5 years ago

0.0.49

5 years ago

0.0.48

5 years ago

0.0.47

5 years ago

0.0.46

5 years ago

0.0.45

5 years ago

0.0.44

5 years ago

0.0.43

5 years ago

0.0.41

5 years ago

0.0.39

5 years ago

0.0.38

5 years ago

0.0.37

5 years ago

0.0.36

5 years ago

0.0.35

5 years ago

0.0.34

5 years ago

0.0.33

5 years ago

0.0.32

5 years ago

0.0.31

5 years ago

0.0.30

5 years ago

0.0.29

5 years ago

0.0.28

5 years ago

0.0.27

5 years ago

0.0.26

5 years ago

0.0.25

5 years ago

0.0.24

5 years ago

0.0.23

5 years ago

0.0.22

5 years ago

0.0.21

5 years ago

0.0.20

5 years ago

0.0.19

5 years ago

0.0.18

5 years ago

0.0.16

5 years ago

0.0.14

5 years ago

0.0.13

5 years ago

0.0.12

5 years ago

0.0.11

5 years ago

0.0.10

5 years ago

0.0.9

5 years ago

0.0.8

5 years ago

0.0.7

5 years ago

0.0.6

5 years ago

0.0.5

5 years ago

0.0.4

5 years ago

0.0.3

5 years ago

0.0.2

5 years ago

0.0.1

5 years ago