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

@zoov/design-system

v1.0.0

Published

Vue implementation of the Zoov Design System

Downloads

5

Readme

ZDS Web – VueJS implementation

This is a VueJS implementation of Zoov Design System.


Getting started

To benefit from tree-shaking you need to link direclty with the sources. For that you will need Webpack (or Nuxt) to process .vue files along with stylus and pug preprocessors. Otherwize you can build the lib with yarn build:lib and use the built JS and CSS files in /dist.

Installation

Run npm install --save @zoov/design-system or yarn add @zoov/design-system. Then you need to install dev dependencies: webpack or nuxt and also:

npm install --save-dev stylus stylus-loader pug pug-plain-loader

or:

yarn add -D stylus stylus-loader pug pug-plain-loader

Auto import styles

Webpack

If you are using Webpack, you may want to automatically import component styles. In your Webpack config, use:

// webpack config
  module: {
    rules: [
      {
        test: /\.styl(us)?$/,
        loader: 'stylus-loader',
        options: {
          import: ['~@zoov/design-system/src/styles/components'],
        },
      },
      ...
    ],
  }

Vue CLI

Alternately, in a project created using Vue CLI, you can add this config:

// vue.config.js
  css: {
    loaderOptions: {
      stylus: {
        import: ['~@zoov/design-system/src/styles/components'],
      },
    },
  },

Nuxt

If you use Nuxt, the simplest way is to install the module @nuxtjs/style-resources and add:

// nuxt.config.js
  styleResources: {
    stylus: ['~@zoov/design-system/src/styles/components.styl'],
  },

Importing zds & components

import Vue from 'vue';
import zds from '@zoov/design-system';

import * as components from '@zoov/design-system/src/components'

Vue.use(zds, { components });

// alternately you can cherry-pick components to benefit from tree-shaking:
// import { ZButton } from '@zoov/design-system/src/components/ZButton';
// Vue.use(zds, { components: { ZButton } });

If you need this library to be rendered server-side such as with Nuxt in universal mode, you must transpile it, e.g.:

// nuxt.config.js
  build: {
    transpile: ['@zoov/design-system'],
  },

Using built-in svg icons

To properly use ZIcon component, you must have an svg inline loader (such as svg-inline-loader).

Webpack

// webpack config
  module: {
    rules: [
      {
        test: /\.svg?$/,
        loader: 'svg-inline-loader',
      },
      ...
    ],
  }

Vue CLI

// vue.config.js
  chainWebpack: config => {
    const svgRule = config.module.rule('svg');
    svgRule.uses.clear();
    svgRule
      .use('svg-inline-loader')
      .loader('svg-inline-loader')
      .end();
  }

Nuxt

// nuxt.config.js
  build: {
    extend(config) {
      config.module.rules.find(rule => rule.test.test('.svg')).test = /\.(png|jpe?g|gif|webp)$/i;
      config.module.rules = config.module.rules.concat([
        {
          test: /\.svg$/,
          use: ['svg-inline-loader'],
        },
      ]);
    },
  },

Documentation

Instance zds

The library exposes an instance of zds accessible on vm instances using:

this.$zds

It exposes few helpers, inspired by Vuetify, such as:

// get the client width
this.$zds.clientWitdh: Number
// used to know under which breakpoint the client width is
this.$zds.breakpoint.xxs: Boolean
this.$zds.breakpoint.xs: Boolean
this.$zds.breakpoint.sm: Boolean
this.$zds.breakpoint.md: Boolean
this.$zds.breakpoint.lg: Boolean
// useful to distinguish between SSR and Browser
this.$zds.client: Boolean
// to know if we are on a touch device
this.$zds.isTouchDevice: Boolean

Directives

  • v-parallax="options"

    Add a smooth parallax effect using simple-parallax-js. Default options are:

    {
        scale: 1.5,
        delay: 0.5,
        transition: 'cubic-bezier(0,0,0,1)',
        overflow: true,
    }
  • v-client="transition" // transition = 'fade' | null

    Add a v-client class to the element rendered en server-side, which is used to hide element using opacity. When mounted on client-side, the v-client class is removed so that the component is revealed.

Styles

Convention

The class naming conventions is BEM (with scope prefix z-, and zt- for Vue transitions).

Using ZDS styles

IMPORTANT NOTE: For all the HTML elements of your document to be affected by ZDS styles, you need to wrap all the content in ZApp component or add to the document container element the class .zds.

Mixins and functions

When direclty linking this library style sources, you will be provided with utility functions and mixins that can straighlty be used in your stylus code:

  • Function size($n) Can be used to space and size based on multiples of $step (curently 8px)

  • Other mixins are defined in src/styles/tools/mixins.styl. The are useful for example to apply background-color, text-color, elevation (shadows), and typography rules...

Media queries mixins

Media queries mixins with predefined behaviour and breakpoints can be called as:

  • Rules applied for all window size greater or equal than $breakpoint_name:
+media-down($breakpoint_name)
  • Rules applied for all window size greater or equal than $breakpoint_name:
+media-up($breakpoint_name)
  • Rules applied for all window sizes between $breakpoint_name and $breakpoint_name_2:
+media-between($breakpoint_name_1, $breakpoint_name_2)

Breakpoints are defined as:

$breakpoints := {
  'xxs': 360px,
  'xs': 600px,
  'sm': 960px,
  'md': 1200px,
  'lg': 1920px,
}

Utility classes

Several utility classes are defined and can be used straightaway.

Colors

Colors can be directly used by their variable if you import the stylus files:

$colors.<color_name>.<color_shade>

Names and shades are defined in src/styles/settings/colors.styl. Shade scale is varying as:

dark-{n} ... dark-2 dark-1 base light-1 light-2 ... light-{n}

and available names are:

// from light-5 to dark-5
neutral
// from light-2 to dark-2
primary
secondary
tertiary
quaternary
success
info
warning
danger
// only 'base'
white
black
zoov-maintenance

Or you can use the corresponding classes:

.{$color_name} // to apply 'base' background color
.text--{$color_name} // to apply 'base' text & icon color
.{$color_name}--{$color_shade} // to apply a darker or lighter background color
.text--{$color_name}--${color_shade} // to apply a darker or lighter text & icon color

Example:

span.primary.text--neutral--lighten-3 zoov

will be displayed as zoov

Marging and padding

Nomenclature: .{S}{D}-{V}

Where:

S is m for margin and p for padding,

D is the direction where to apply the spacing:

  • t: top
  • l: left
  • r: right
  • b: bottom
  • x: left and right
  • y: top and bottom
  • a: all

V is the spacing value (mutliple of 8px)

Examples:

.mt-2 // margin-top: 16px !important;
.pb-3 // padding-bottom: 24px !important;
.mx-1 // margin-left: 16px !important;
      // margin-right: 16px !important;

Opacity

.alpha-0      // => opacity: 0   (0%)
.alpha-10     // => opacity: 0.1 (10%)
.alpha-20     // => opacity: 0.2 (20%)
.alpha-30     // => opacity: 0.3 (30%)
.alpha-40     // => opacity: 0.4 (40%)
.alpha-50     // => opacity: 0.5 (50%)
.alpha-60     // => opacity: 0.6 (60%)
.alpha-70     // => opacity: 0.7 (70%)
.alpha-80     // => opacity: 0.8 (80%)
.alpha-90     // => opacity: 0.9 (90%)
.alpha-100    // => opacity: 1   (100%)
Typography rules

These classes apply the corresponding tag style:

.typography--display-3 // h1
.typography--display-2 // h2
.typography--display-1 // h3
.typography--heading // h4
.typography--title // h5
.typography--subheading // h6, input
.typography--body // p, ul, li, label
.typography--caption // small, caption
.typography--button // button, input
Text transformations
  • Non-breaking white-spaces:
.text--nowrap
  • Adjust line-height, where $n is a multiple of 8px
.text--lh-{$n}
  • Weights:
.text--{$weight}

where weights are defined such as:

$weights := {
  thin:         100,
  extra-light:  200,
  light:        300,
  normal:       400,
  medium:       500,
  semi-bold:    600,
  bold:         700,
  extra-bold:   800,
  black:        900
}
  • Alignments
.text--{left|right|center}

Responsive conditional display

.{$breakpoing_name}-and-down
  @media (min-width: $breakpoint_value)
    display none !important

.{$breakpoing_name}-and-up
  @media (max-width: $breakpoint_value - $epsilon)
    display none !important

Components

The components are not properly documented for now, but looking to the sources should be self explainatory.

Transitions

Vue transitions are defined in src/styles/generic/transition.styl:

.zt-fade
.zt-fade-out
.zt-fade-in
.zt-fade-rotate
.zt-scale
.zt-fade-scale
.zt-from-top
.zt-from-left
.zt-from-right
.zt-from-bottom
.zt-fade-from-top
.zt-fade-from-left
.zt-fade-from-right
.zt-fade-from-bottom

Authoring

Install dependencies

yarn install

Compiles and hot-reloads for development

This will serve Sandbox.vue in which you can play with the library:

yarn dev

Build sandbox

yarn build:sandbox

Compiles and minifies for production

yarn build:lib

Lints and fixes files

yarn lint

Customize configuration

See Configuration Reference.