npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-native-rncn

v1.1.0

Published

React native implementation of classnames

Downloads

8

Readme

react-native-rncn

How to use

Wrap your App in StylesProvider and pass your styles object as value

import React, { useState } from "react"
import { defaultStyles, defaultTheme, StylesProvider, View, Pressable, Text } from "react-native-rncn"

const styles = defaultStyles(defaultTheme)

function App() {
  const [selected, setSelected] = useState(false)

  return (
    <StylesProvider value={styles}>
      <View className="flex1 alignItemsCenter centerAll">
        <Pressable onPress={() => setSelected(!selected)} className={["pdv8 pdh12 rounded", selected && "bgSuccess"]}>
          <Text className={[selected && "textLight"]}>Press me senpai!</Text>
        </Pressable>
      </View>
    </StylesProvider>
  )
}

export default App

Priority:

Class names are applied from the className prop in left to right order and then styles passed from style prop are applied

eg. <View className="bgBlue bgRed" /> Here bgRed will take priority above bgBlue

<View className="bgBlue bgRed" style={{ backgroundColor: '#e7e7e7' }} /> Here bgRed will take priority above bgBlue and backgroudndColor from style will take priority above that so result will be bg #e7e7e7

Theming:

You can pass in a custom theme same as the below object in defaultStyles() to put your colors in default theme

import { defaultStyles } from "react-native-rncn"

const theme = {
  colors: {
    brand: "#0b4353",
    primary: "#0b4353",
    secondary: "#6c757d",
    success: "#06B191",
    danger: "#ef375c",
    warning: "#D9A028",
    info: "#17a2b8",
    light: "#f8f9fa",
    dark: "#343a40",
    white: "#fff",
    muted: "#7C858D",
    transducent: "rgba(255,255,255,0.17)",
    transparent: "transparent",
    borderColor: "#dee2e6"
  },
  sizes: {
    borderRadiusRounded: 8,
    borderRadiusRoundedSm: 4,
    borderRadiusRoundedLg: 14,
    borderRadiusPill: 1000
  }
}

const styles = defaultStyles(theme)

Colors:

For views: bg[Brand|Primary|Secondary|Warning|Info|Light|Dark|White|Muted|Transparent]

For border: border[Brand|Primary|Secondary|Warning|Info|Light|Dark|White|Muted|Transparent]

For text: text[Brand|Primary|Secondary|Warning|Info|Light|Dark|White|Muted|Transparent] (only works on Text)

<Text className="bgPrimary textSecondary borderDark" />

Sizing:

n can be one of 2,4,6,8,12,14,16,18,24

For padding: pd[n], pdh[n], pdv[n], pdt[n], pdb[n], pdr[n], pdl[n]

For margin: mg[n], mgh[n], mgv[n], mgt[n], mgb[n], mgr[n], mgl[n]

order: all sides, horizontal, vertical, top, bottom, right, left

<View className="pdv8 pdh12 mgv4 mgh18" />

For borders n can be one of 0,1,2,4,6

For border width: border[n], borderTop[n], borderBottom[n], borderLeft[n], borderRight[n]

If you add multiple eg. <View className="mg8 mgt18" /> here left, right, bottom will have margin 8 and on top you will have margin 18

Flexbox:

For Row:

Use classname "row" to create a row which will have margin -18 and use classname "col" in its children to create columns with flex 1 which have margin of 16 between them, "col" is same as applying "flex1 mgh8"

eg.

<View className="row">
  <View className="col bgPrimary alignItemsCenter pd8">
    <Text className="textLight">Col 1</Text>
  </View>
  <View className="col bgDark alignItemsCenter pd8">
    <Text className="textLight">Col 2</Text>
  </View>
  <View className="col bgSuccess alignItemsCenter pd8">
    <Text className="textLight">Col 3</Text>
  </View>
</View>

Simple Row example

Note: if you use bgPrimary or any background color on row it will bleed out so wrap the row View in another View and give that view a background color like

<View className="bgWarning">
  <View className="row">
    <View className="col bgPrimary alignItemsCenter pd8">
      <Text className="textLight">Col 1</Text>
    </View>
    <View className="col bgDark alignItemsCenter pd8">
      <Text className="textLight">Col 2</Text>
    </View>
    <View className="col bgSuccess alignItemsCenter pd8">
      <Text className="textLight">Col 3</Text>
    </View>
  </View>
</View>

Row with bg example

If you just want a flexDirection row and flex items in it use:

<View className="flexRow">
  <View className="flex1 bgPrimary alignItemsCenter pd8">
    <Text className="textLight">Col 1</Text>
  </View>
  <View className="flex3 bgDark alignItemsCenter pd8">
    <Text className="textLight">Col 2</Text>
  </View>
  <View className="flex1 bgSuccess alignItemsCenter pd8">
    <Text className="textLight">Col 3</Text>
  </View>
</View>

Row example

The flex system is same as bootsrap 12 column: available flex classes: flex[n] n can be between 1-12

Other classes:

For wrapping use flexWrap

To center from all sides use centerAll

Other align and justify:

align[Center|Start|End|Strech]

justify[Center|Start|End|Evenly|Between|Around]

For width and height:

width[25,33,50,66,75,100]

height[25,33,50,66,75,100]

Text:

You can apply default styles for all text by adding textDefault in your styles. Default is textDefault: { fontSize: 14, color: '#3d3d3d', }

<Text className="h1">h1 heading</Text>
<Text className="h2">h2 heading</Text>
<Text className="h3">h3 heading</Text>
<Text className="h4">h4 heading</Text>
<Text className="h5">h5 heading</Text>
<Text className="p">
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Id
eaque cum veniam ullam architecto? Perferendis sunt eaque
obcaecati perspiciatis. Nihil aperiam animi unde quo ipsum
consequatur fugit ex voluptatem voluptatum.
</Text>
<Text className="sm">small text</Text>
<Text className="xsm">extra small text</Text>

Text Style example

Border radius:

For all sides: rounded, roundedLg, roundedSm, roundedPill

For two sides: border[Top|Bottom][rounded|roundedlg|roundedsm]

For specific side:

border[Top|Bottom][left|right][Rounded|RoundedSm|RoundedLg]

Example:

<View className="rounded borderTopRounded borderBottomRightRoundedLg" />

Border Radius example

Positioning:

Use positionRelative on view you want to position relative to

Use positionAbsolute to position view absolutely

To position on sides use: position[Top|Bottom][left|right]

<View className="positionRelative bgDark" style={{ width: 200, height: 200 }}>
  <View className="positionAbsolute positionTopRight bgDanger" style={{ height: 25, width: 25 }} />

  <View className="positionAbsolute positionTopLeft bgWarning" style={{ height: 25, width: 25 }} />

  <View className="positionAbsolute positionBottomRight bgInfo" style={{ height: 25, width: 25 }} />

  <View className="positionAbsolute positionBottomLeft bgPrimary" style={{ height: 25, width: 25 }} />
</View>

Positioning example

Elevation

For elevation use: elevation[n] where n is between 1-24

LinearGradient

Classnames as expected Colors is array of colors in order they are to show Direction can be between 0-360 or 'to right'|'to left'|'to bottom'|'to top'|'to top right'|'to top left'|'to bottom left'|'to bottom right'

<LinearGradient className="roundedSm" colors={["#283048", "#859398"]} direction="to bottom">
  <Text className="pdh18 pdv6 textLight">Hello</Text>
</LinearGradient>

Linear gradient example

RadioGroup

const [selected, setSelected] = useState(null)

<RadioGroup
  value={selected}
  onChangeValue={(option) => setSelected(option.value)}
  options={[
    { label: "Bar", value: "bar" },
    { label: "Foo", value: "foo" },
    { label: "Baz", value: "baz" },
    { label: "Another", value: "another" },
  ]}
/>

Radio Group example

For multiple selection

const [selected, setSelected] = useState([])

<RadioGroup
  isMulti
  value={selected}
  onChangeValue={(option) => selected.includes(option.value) ? setSelected([...selected].filter(({value}) => value !== option.value) : setSelected([...selected, option.value])}
  options={[
    { label: "Bar", value: "bar" },
    { label: "Foo", value: "foo" },
    { label: "Baz", value: "baz" },
    { label: "Another", value: "another" },
  ]}
/>