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

fucss

v0.8.18

Published

Fucss is fastest tool and method to write custom styling generator for riot, react and html.

Downloads

13

Readme

FUCSS client & server styling generator

Fucss is fastest tool and method to write custom styling generator for riot, react, webpack and plain html.

Fucss styling generator Hell YEAH!!!!
client: https://cdn.jsdelivr.net/npm/fucss/fucss.js
server: npm install --save fucss
next: npm install --save next-fucss
fuico: https://github.com/noneedsystem/fuico

Example

You just implement fucss to your project using only client script or server side options fucss | next-fucss

button.js

export default ({ text }) => (
 <button className="p:15px-30px br:5px bs:1 bd:0 bg:prim c:white m:10px fl:r">{text}</button>
);

output.css

/** Fucss class rules */ 
.p\:15px-30px{padding:15px 30px;}
.br\:5px{border-radius:5px;}
.bd\:0{border:0;}
.bg\:prim{background:#DE3E3E;}
.c\:white{color:#fff;}
.m\:20px{margin:20px;}
.hv-tf\:5px:hover{transform:5px;}
.fl\:r{float:right;}
.m\:50px{margin:50px;}

#0.7.9

added tools to generate jsx, webpack classes and styling separately

#0.7.8

added fucss.grab class generating function from objects. fucss.grab({'p:20px': true} | (isTrue) => ({ 'p:20px': isTrue}), {isTrue: true})
improved fucss.storeHTML now stores object inside div dummy elem for class harvesting
added md-fs:16px_lh:1.3 class chaining support

  @media only screen and (min-width: 768px) 
    .md-fs\:16px_lh\:1\.3 {font-size: 16px; line-height: 1.3;}

solved bg:lg-70ndg-prim-sec linear gradient implementation
todo fix transition-delay | multi transition fix required
todo improv unit testing

#0.7.7

fixed jc:... has no auto margin on its items. Now justify-content will work.
added class | classname | class... attributes are supported.
solved tt:uc text-transform: uppercase
added an:hide-1s sets osition: absolute; visibility: hidden; after 1s
added afm:fwd support animation-fill-mode: forwards
added bv:hd support backface-visibility:hidden
added bg-atc:fx support background-attachment:fixed parallax
added zm:2 support zoom:2
added cp:ins(100px-50px) support clip-path: inset(100px 50px)
added t3d:0-0-0 support transform: translate3d(0, 0, 0)
solved bft-blr:1px support backdrop-filter:blur(1px)
added prsp:1000 support perspective:1000 refactored Parser. Now riot parser supports classNames = (value) => ({ 'classname': value })

#0.7.6


added scaler animation @keyframes scaler
added animation support an inf added an:scaler-inf-1s-eio { animation: scaler infinite 1s ease-in-out }

#0.7.5


fixed dp:flx has no auto margin on its items. Now align-items & justify-content will work
added calc support w:calc(100pc-300px)
added value ini: initial included bz:ini
added value st: static included dp:st

#0.7.4


fixed grayscale typo

#0.7.3


added node server support require('fucss')
added fucss.storeHTML function that stores array of html strings in fucss.HTML array added props to fucss.generateStyling function

  // Returns css rules on the server side
  fucss.generateStyling({
    riot: html || fucss.HTML.join(''),
    returnStyle: true,
    glob: true,
    anim: true
  })

  // Now returnStyle option executes \' replacer
  if(opts.riot && opts.returnStyle)
    htmlString = htmlString.replace(/\\'/g, "'");

#0.7.2


fixed now all riot component classes are generated EG class="ts:tf { 'trx:30pc': modify }"

#0.7.1


fixed negative values z:20n { z-index: -20 }
added properties scaleX scaleY scaleZ added scx:1n { transform: scaleX(-1) }

  fucss.properties = {
    scx: 'scaleX',
    scy: 'scaleY',
    scz: 'scaleZ',
  }

#0.7.0


add property visability added vsb:vs vsb:hd

#0.6.9b


refactored riot tags are now collected through xhr response

#0.6.9a


changed global values moved to top of the generated code
removed moz, webkit prefexis
changed smx: 401, mdx: 769, lgx: 1025

#0.6.9


refactored txt property is now config instead of property (use in body) txt:black100
fixed values 1s,tf ar now not sticky (multiple transition support added) ts:op-1s,tf-500ms-eio-1s { transition: opacity 1s, transform 500ms easy-in-out 1s; }
fixed ac - align-content now is not treated as state active ac-ac:c :active { align-content: center } changed bl -> blr filter function value blr:1px { filter:blur(1px) }
changed op - opacity filter removed op:0.1 { opacity:0.1 }

  fucss.properties = {
    mbm: 'mix-blend-mode'
  }
  fucss.values = {
    dif: 'difference',
    light: 'lighten',
    dark: 'darken',
  }

#0.6.8

No need for fux-trans & fux-boxsh Features: transitions, transform, functional values, sibling selector support, boxshadow


  //box shadow now is auto generated
  bs:1

  //transition all .45s cubic-bezier(0.23, 1, 0.32, 1)
  ts:all

  //transform
  scl:1.1
  /**
    scl: 'scale',
    trl: 'translate',
    rot: 'rotate',
    skw: 'skew',
    mtx: 'matrix',
    prp: 'perspective',
    trx: 'translateX',
    try: 'translateY',
    trz: 'translateZ',
  */


  //version 0.6.8
  fucss.functions = {
    //background
    lg: 'linear-gradient',
    rg: 'radial-gradient',

    //color
    rgb: 'rgb',
    rgba: 'rgba',
    //transition
    cb: 'cubic-bezier',
  }

  fucss.transforms = {
    scl: 'scale',
    trl: 'translate',
    rot: 'rotate',
    skw: 'skew',
    mtx: 'matrix',
    prp: 'perspective',
    trx: 'translateX',
    try: 'translateY',
    trz: 'translateZ',
  }

  fucss.filters = {
    bl: 'blur',
    bh: 'brightness',
    cn: 'contrast',
    ds: 'drop-shadow',
    gs: 'greyscale',
    hr: 'hue-rotate',
    iv: 'invert',
    op: 'opacity',
    st: 'saturate',
    sp: 'sepia',
  }

  fucss['shape-outside'] = {
    crc: 'circle',
    rec: 'rect',
    els: 'ellipse',
    ins: 'inset',
    poly: 'polygon',
  }

#0.6.7

style in header now is created dynamically

#0.6.6a

multiple target escape fix

#0.6.6

fixed multiple target issue
fixed fux-trans // now it works for all transitions
implemented first, last child


  //multiple targets now are escaped
  fs:100pc_a,h1 = 'a, h1 { font-size: 100% }';

  //fux-trans fixed
  fucssExtras = {'fux-trans':    'transition: all .3s ease;'}

  //new state last-child implemented
  fucss.states = {
    lc: 'last-child',
    last: 'last-child',
    first: 'frist-child'
  }

  //new props
  fucss.properties = {
    jc: 'justify-content',
    cont: 'content',
  }

#0.6.5

media queries now have max-width

  //smx => @media only screen and max-width 399px ...
  fucss.media = {
    smx: 399,
    mdx: 767,
    lgx: 1023,
  };

fucss properties added

  fucss.properties = {
    flxf: 'flex-flow'
  }

#0.6.4

color modifiers enabled for example default pink = '#E91E63':

  bg:pinka5   = { background: rgba(233,30,99,0.5); }  
  bg:pinkl10  = { background: #ff387d; }  
  bg:pinkd10  = { background: #d0054a; }  

Flex box support implemented.
https://css-tricks.com/snippets/css/a-guide-to-flexbox/
default colors modified and implemented color modifier
implemented global default rules


  //css important eg: bg:pink-! = { background: ## #E91E63 !important; }

  //colors moved to separate object and redefined
  fucss.colors = {
    //version 6 colors
    prim:     '#DE3E3E',  // red
    sec:      '#2F3B50',  // grey dark

    red:      '#F44336',
    pink:     '#E91E63',
    purple:   '#9C27B0',
    dpurple:  '#673AB7',
    indigo:   '#3F51B5',
    blue:     '#2196F3',
    lblue:    '#03A9F4',
    cyan:     '#00BCD4',
    teal:     '#009688',
    green:    '#4CAF50',
    lgreen:   '#8BC34A',
    lime:     '#CDDC39',
    yellow:   '#FFEB3B',
    amber:    '#FFC107',
    orange:   '#FF9800',
    dorange:  '#FF5722',
    brown:    '#795548',
    grey:     '#9E9E9E',
    bgrey:    '#607D8B',

    black:    '#111',
    silver:   '#DDD',
    white:    '#fff',

    navy:     '#001f3f',
    aqua:     '#7FDBFF',
    teil:     '#39CCCC',
    olive:    '#3D9970',
    maroon:   '#85144b',
    fuchsia:  '#F012BE',
    // social
    twitter:  '#5AACF2',
    facebook: '#3C599C',
    google:   '#D8503D',
  };

  // now you can specify color modes for the color eg: pink400 = pinklight6
  fucss.colorMods = {
    //50:   'l52',  // white 'a13'
    100:  'l37',  // white 'a31'
    200:  'l26',  // white 'a50'
    300:  'l12',  // white 'a7'
    400:  'l6',   // white '185'
    500:  '',
    600:  'd6',   // black 'a91'
    700:  'd12',  // black 'a81'
    800:  'd18',  // black 'a71'
    900:  'd24'   // black 'a52'
  };

  // now you can predefine color configs eg: <body class="prim:indigo sec:pink err:red warn:yellow">
  fucss.config = {
    'prim': 'colors',
    'sec': 'colors',
    'err': 'colors',
    'warn': 'colors',
  };

  // flex box support
  var fucssProperties = {
    //version 0.6.3
    ww: 'word-wrap',
    fd: 'flex-direction',
    od: 'order',
    flxg: 'flex-grow',
    flxs: 'flex-shrink',
    flxw: 'flx-wrap',
    flxb: 'flex-basis',
    flx: 'flex',
    as: 'align-self',
    ai: 'align-items',
    ac: 'align-content',
  }

  var fucssValues = {
    //version 0.6.3
    pl: 'pre-line',
    nm: 'normal',
    bl: 'baseline',
    flx: 'flex',
    if: 'inline-flex',
    row: 'row',
    col: 'col',
    rr: 'row-reverse',
    cr: 'column-reverse',
    li: 'list-item',
    wrap: 'wrap',
    sb: 'space-between',
    sa: 'space-around',
    fs: 'flex-start',
    fe: 'flex-end',
    stc: 'stretch',
  }

  var fucssGlob = false; // by default it is enabled

  var fucssGlobalExtras = {
    "[contenteditable='plaintext-only']":   'cursor: text',
    "[contenteditable='plaintext-only']:empty:before" : 'content: attr(placeholder); opacity: 0.5; display: block;',
    "body": 'margin: 0; text-align: center; font-family: inherit; border-width: 0;',
    "*": 'margin: 0 auto; outline: 0; padding: 0; box-sizing: border-box; border-style: solid; border-width: 0; vertical-align: baseline;',
    "a": 'text-decoration: none;',
    "a, span, img, button, i": 'display: inline-block;',
    "button, a": 'cursor: pointer',
    "input, button, select, option, textarea": 'font-size: 100%; font-family: inherit;',
  }

#0.6.2

Predefined colours, animations implemented. Splash screen deprecated.


  //all values can be overwrited using fucssValues
  var fucssValues = {
    //version 6 colors
    prim:     '#DE3E3E',  // red
    sec:      '#5FBA7D',  // grey dark
    tert:     '#2F3B50',  // green
    quat:     '#f6f7f4',  // grey
    quin:     '#D3D1D1',  // grey light
    //sext:     '#D3D1D1',
    //sept:     '#D3D1D1',
    //oct:      '#D3D1D1',
    //non:      '#D3D1D1',
    //den:      '#F1F1F1', // bg grey very light,
    navy:     '#001f3f',
    blue:     '#0074D9',
    aqua:     '#7FDBFF',
    teil:     '#39CCCC',
    olive:    '#3D9970',
    green:    '#2ECC40',
    lime:     '#01FF70',
    yellow:   '#FFDC00',
    orange:   '#FF851B',
    red:      '#FF4136',
    maroon:   '#85144b',
    fuchsia:  '#F012BE',
    purple:   '#B10DC9',
    black:    '#111111',
    grey:     '#AAAAAA',
    silver:   '#DDDDDD',
  }

  //deprecated splash screen value
  var fucssSplash = false;

  //implemented
  var fucssAnim = false; // default true

  // animations implemented
  @keyframes spin
  @keyframes fadeIn
  @keyframes fadeOut

  // new extras added
  var fucssExtras = {
    'fux-bb':       'border-sizing: border-box;',
    'fux-clear':    'overflow: hidden;',
    'fux-fadeIn':   'animation-name: fadeIn;animation-iteration-count: 1;\
                      animation-timing-function: ease-in;animation-duration: 0.2s;opacity: 1;',
    'fux-spinner':  'position: absolute; top: calc(50% - 25px); left: calc(50% - 25px); width: 50px; height: 50px; border: 3px solid ## #fff;\
      			          border-radius: 50%; border-top-color: ## #DE3E3E; -webkit-animation: spin 0.75s ease-in-out infinite;',
    'fux-boxsh':    'box-shadow: 0 1px 2px rgba(0,0,0,.1)',
    'fux-trans':    'transition: color 0.1 ease-in; transition-property: color, background-color;',
  }
fucss.riotExtractNGenerate = function(){}

#0.6.1

Auto riot class generator implemented


//now generates automatically riot tag classes when script[type="riot/tag" and !!window.riot
fucss.riotExtractNGenerate = function(){}

#0.6.0

Minified version now available

  // now riot.js class object can be extracted too and all rules will be generated
  var _jsStr = "<div class={'op:0.8 hv-op:1': true, 'p:10px': true, 'm:10px': false} />";
  fucss.generateStyling({riot: _jsStr, returnStyle: false});

  // if you need to use fucss for riot.js
  var _tags = document.querySelectorAll('script[type="riot/tag"');
  var _jsStr = document.body.outerHTML;
  var _jsLoadedCount = 0;
  _tags.forEach(function(tag){
  	riot.compile(tag.src, function(js){
    	_jsStr += js;
    	_jsLoadedCount++;
    	if(_jsLoadedCount === _tags.length){
    		fucss.generateStyling({riot: _jsStr, returnStyle: false});

  			riot.mount('*');
  			route.start(true);
    	}
  	});
  });

#0.5.9c

Fixed fucssValues implementation

// now it is assigned before window.onload
Object.assign(fucss.values, window.fucssValues)

#0.5.9

Fixed color generator

#0.5.8

Change log

  //default splash value now is set to false
  fucss.splash = false;

  //colors can be predefined
  var fucssValues = {
    main: '#ffcb05',
    grey: '#dadada',
  };

  /** new function for react.js and classNames library implemented

    <div className="bg:000"/>

    or

    var getDivClassNames = classNames({
      'bg:000': true,
    });

  **/
  fucss.generateStyling({jsx: _scriptString});
  <!--
    now it is possible to use lighten(l25) / darken(d25) / alpha(a25) for colours.
    Can be used with predifined values eg: (bg:mainl25)
  -->
  <div class="bg:ffcb05l25">colour ## #ffcb05 lightened by 25%</div>

#0.5.6

Change log

Media queries changed

  fucss.media = {
    sm: 400,
    md: 768,
    lg: 1024,
  };

#0.5.5

Change log

Splash screen implemented

<!-- put inside body -->
<body>
  <div class="fux-spin"></div>
</body>

Properties

<!-- "bs" changed to "bz" "box-sizing"-->
bs => bz                  // box-sizing

<!-- We need bs for "box-shadow" more then "box-sizing" -->
bs                        // box-shadow

<!-- NEW table-layout prop-->
tl                        //table-layout

Now fucss is a bit more customizable. AT LAST WE CAN PREDEFINE COLORS and create custom rules

<script>

  // Your custom values
  var fucssValues = {
    main: '#ffcb05'
  };

  // Your custom extra classess (fux)
  var fucssExtras = {
    'fux-grd-blue': 'background: linear-gradient(to right, rgba(25,32,68,0.9) 0%, rgba(25,32,68,0) 100%);'
  };

  // Starts fucss checking function every 5s
  var fucssWatch = 5000;

  // Stops fucss init function
  var fucssInit = false;

  // Disables fucss splash screen
  var fucssSplash = false;
</script>

#0.5.4

Change log

  <!-- Atlast we have two "font-family" word support -->
  ff:Open+Sans              // font-family:"Open+Sans";

  <!-- ls changed to lis "list-style"-->
  ls => lis                 // list-style

  <!-- We need ls for "letter-spacing" more then "list-style" -->
  ls                        // letter-spacing

  <!-- Added Important functionality -->
  c:fff-!                   // color:## #fff !important;

#0.5.2

Stuff


// set fucss.init = false and fucss will not initiate after document is loaded

// function fucss.generateStyling(html, returnStyle) lets you to initate style rendering in js
// u can pass 2 props to this function
// html lets you to pass htmlString
// returnStyle lets you to get back the cssString instead of inserting automatically to your html header

fucss.watch = 0;
fucss.init = true;

fucss.seps = {
  'value': ':',
  'space': '-',
  'target': '_',
};

fucss.media = {
  sm: 480,
  md: 768,
  lg: 1024,
};

fucss.states = {
  hov: 'hover',
  act: 'active',
  foc: 'focus',

  hv: 'hover',
  ac: 'active',
  fc: 'focus',
};

fucss.properties = {
  bs: 'box-sizing',
  pdg: 'padding',
  mrg: 'margin',
  clr: 'color',
  bg: 'background',
  txt: 'text-align',
  brd: 'border',
  dsp: 'display',
  pos: 'position',
  h: 'height',
  w: 'width',
  fnt: 'font',
  flt: 'float',
  vlgn: 'vertical-align',
  hlgn: 'text-align',
  col: 'width',
  lh: 'line-height',
  crs: 'cursor',
  dec: 'text-decoration',
  tb: 'table',
   // added by me
  idx: 'z-index',
  op: 'opacity',
  tran: 'text-transform',
  mh: 'min-height',
  mxw: 'max-width',
  mxh: 'max-height',
  mnw: 'min-width',
  mnh: 'min-height',

  ls: 'list-style',
  ltrs: 'letter-spacing',
  ws: 'white-space',

  //version 4
  ff: 'font-family',
  ta: 'text-align',
  fs: 'font-size',
  dp: 'display',
  t: 'top',
  r: 'right',
  b: 'bottom',
  l: 'left',
  of: 'overflow',
  br: 'border-radius',
  bd: 'border',
  fw: 'font-weight',
  c: 'color',
  p: 'padding',
  m: 'margin',
  va: 'vertical-align',
  ps: 'position',
  xw: 'max-width',
  nw: 'min-width',
  td: 'text-decoration',
  z: 'z-index',
  fl: 'float',
  cl: 'clear',
  sh: 'box-shadow',
  tr: 'text-transform',
};

//version 4
fucss.colorazable = [
  'color',
  'background',
  'background-color',
  'border',
  'border-color',
  'border-bottom',
  'border-top',,
  'border-left',
  'border-right',
  'border-right-color',
  'border-left-color',
  'border-top-color',
  'border-bottom-color',
];

fucss.units = ['px', 'em', 'pc', 'vh', 'vw'];

fucss.groups = ['tb', 'rl'];

fucss.addons = {
  t: 'top',
  r: 'right',
  b: 'bottom',
  l: 'left',
  pos: 'position',
  rad: 'radius',
  fml: 'family',
   // added by me
  sz: 'size',
  rd: 'radius',
  w: 'width',
  clr: 'color',
  stl: 'style',
  lyt: 'layout',
  wg: 'weight',
  upc: 'uppercase',
  //version 4
  c: 'color',
  s: 'style',
  rp: 'repeat',
  ps: 'position',
};


fucss.values = {
  bb: 'border-box',
  greyd1: '#ffcb05',
  blackl3: '#f24543',
  bot: 'bottom',
  c: 'center',
  r: 'right',
  l: 'left',
  t: 'top',
  b: 'bottom',
  m: 'middle',
  n: 'none',
  clr: 'color',
  rel: 'relative',
  abs: 'absolute',
  fix: 'fixed',
  inh: 'inherit',
  tc: 'table-cell',
  td: 'table-cell',
  tr: 'table-row',
  tb: 'table',
  no: 0,
  hid: 'hidden',
  vis: 'visible',
  pnt: 'pointer',
  sld: 'solid',
  // added by me
  ib: 'inline-block',
  blk: 'block',
  cl: 'clear',

  //version 4
  hd: 'hidden',
  vs: 'visible',
  bk: 'block',
  pt: 'pointer',
  rl: 'relative',
  ab: 'absolute',
  sd: 'solid',
  ts: 'transparent',
  np: 'nowrap',
  bt: 'both',
  fx: 'fixed',
  cv: 'cover',
  uc: 'uppercase',
  rp: 'no-repeat',
  nrp: 'no-repeat',
};